集合相似度
题目代码运行结果C++ 集合set回顾盲点思路
题目
代码
#include<bits/stdc++.h>
using namespace std
;
int main(){
int n
;
cin
>>n
;
vector
<set
<int> > v(n
);
for(int i
=0;i
<n
;i
++){
int element_num
;
cin
>>element_num
;
set
<int> s
;
for(int j
=0;j
<element_num
;j
++){
int element
;
cin
>>element
;
s
.insert(element
);
}
v
[i
]=s
;
}
int k
;
cin
>>k
;
for(int i
=0;i
<k
;i
++){
int a
,b
;
cin
>>a
>>b
;
int set1
=a
-1,set2
=b
-1;
int nc
=0;
int nt
=v
[set2
].size();
set
<int>::iterator it
;
for(it
=v
[set1
].begin();it
!=v
[set1
].end();it
++){
if(v
[set2
].find(*it
)==v
[set2
].end())
nt
++;
else
nc
++;
}
double ans
=(double)nc
/nt
*100;
printf("%.2f%%\n",ans
);
}
return 0;
}
运行结果
P1957口算练习题.OJ(洛谷)输入和输出
C++ 集合set回顾
【STL】C++ 集合 set
盲点
vector 容器 find 查询函数 像是自动挨个找,找不到就会等于最后一个元素; it 的类型不是简单的元素的类型,是要声明迭代器 iterator →集合set .元素输出.迭代器
vector
<int>::iterator it
= find( L
.begin( ), L
.end( ), );
if ( it
== L
.end( ) )
cout
<< "No" << endl
;
else
cout
<< "Yes" << endl
;
}
printf 输出% 头文件#include<cstdio> printf 函数中,%用于格式控制,如果想输出文本%,需要使用两个百分号,即printf("%%");
但在本题中,Dev-C++尝试时,
printf("%.2f%%\n",ans
);
与
printf("%.2f%\n",ans
);
皆能正常输出% ???
思路