P8396 [CCC 2022 S2] Good Groups 题解
yeshubo_qwq · · 题解
简单模拟。
首先读入规定,也就是哪些人必须在一起,哪些人不能在一起。
然后读入小组,并将小组内的三个人的组别全部赋值为小组的编号。
最后根据小组编号,累加不符合的规定即可。
注意名字是字符串,做到三个人的组别全部赋值为小组的编号时无法直接用名字做下标,可以用 STL 中的 map。
代码:
#include <bits/stdc++.h>
//#define int long long
using namespace std;
namespace P{
int t1,t2,t3,i;
string n1[2][100005],n2[2][100005];
string a,b,c;
map <string,int> g;
void solve(){
cin>>t1;
for (i=1;i<=t1;i++)
cin>>n1[0][i]>>n1[1][i];
cin>>t2;
for (i=1;i<=t2;i++)
cin>>n2[0][i]>>n2[1][i];
cin>>t3;
for (i=1;i<=t3;i++){
cin>>a>>b>>c;
g[a]=g[b]=g[c]=i;
}
int ans=0;
for (i=1;i<=t1;i++)
if (g[n1[0][i]]!=g[n1[1][i]])
ans++;
for (i=1;i<=t2;i++)
if (g[n2[0][i]]==g[n2[1][i]])
ans++;
cout<<ans;
}
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
return P::solve(),0;
}