方法一:21分,最后一个测试用例超时
#include<cstdio>
#include<set>
using namespace std;
set<int> sets[55];
int main(){
int n,m,t,k,p,q,nc,nt,sum;
scanf("%d",&n);
for(int i = 1; i <= n; i++){
scanf("%d",&m);
for(int j = 0; j < m; j++){
scanf("%d",&t);
sets[i].insert(t);
}
}
scanf("%d",&k);
for(int i = 0; i < k; i++){
scanf("%d%d",&p,&q);
sum = sets[p].size() + sets[q].size();
set<int> temp;
temp.insert(sets[p].begin(),sets[p].end());
temp.insert(sets[q].begin(),sets[q].end());
nt = temp.size();
nc = sum - nt;
printf("%.1f%\n",(double)nc*100/nt);
}
return 0;
}
方法二:满分通过
#include<cstdio>
#include<set>
using namespace std;
set<int> sets[55];
int main(){
int n,m,t,k,p,q,nt,sum;
scanf("%d",&n);
for(int i = 1; i <= n; i++){
scanf("%d",&m);
for(int j = 0; j < m; j++){
scanf("%d",&t);
sets[i].insert(t);
}
}
scanf("%d",&k);
for(int i = 0; i < k; i++){
scanf("%d%d",&p,&q);
int nc = 0;
sum = sets[p].size() + sets[q].size();
for(set<int>::iterator it = sets[p].begin(); it != sets[p].end();it++){
if(sets[q].find(*it) != sets[q].end()){
nc++;
}
}
nt = sum- nc;
printf("%.1f%\n",(double)nc*100/nt);
}
return 0;
}
|