P9216 0分求条,有注释
查看原帖
P9216 0分求条,有注释
1260091
_people楼主2024/8/16 11:27

题目传送门

rt

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> PII;//前项存储第i个数字,后项存储某个数字(1~9) 
map<PII,ll> tbl;//查找第i个数中某个数字(1~9)的出现次数 
ll n,T;//如题 
PII p[10010];//记录所有数字 
ll sum;//答案 
int main(){
	scanf("%lld%lld",&n,&T);//读入 
	for(ll i=1;i<=n;i++){
		ll m;//p[i]长度 
		scanf("%lld",&m);
		for(ll j=1;j<=m;j++){
			ll x;
			scanf("%lld",&x);
			p[i]=(PII){i,x};//第i个数的x(x为1~9的某数) 
			tbl[p[i]]++;//每次在第i个数中出现就+1 
		}
	}
	for(ll u=1;u<=T;u++){
		ll op,x,y;
		scanf("%lld%lld%lld",&op,&x,&y);
		if(op==1){//把x放在y后面 
			for(ll i=0;i<=9;i++){
			//查找每种(1~9)数字在两个数中的出现次数,再相加 
				PII a=(PII){x,i};
				PII b=(PII){y,i};
				tbl[b]+=tbl[a];
			}
		}else{
			//如果每种数字(1~9)出现次数相同,则相似 
			bool f=true;//先假设不相似 
			for(ll i=0;i<=9;i++){
			//对比每种数字(1~9) 
				PII a=(PII){x,i};
				PII b=(PII){y,i};
				if(tbl[a]!=tbl[b]) f=false;//若不同,则不相似 
			}
			if(f) sum+=u;//相似就进行运算 
		}
	}
	printf("%lld",sum);//输出 
	return 0;
}
2024/8/16 11:27
加载中...