一、set用法汇总
#include <cstdio>
#include<set>
using namespace std;
int main()
{
set<int> st;
st.insert(3);
st.insert(5);
st.insert(2);
st.insert(3);
for(set<int>::iterator it=st.begin();it!=st.end();it++)
{
printf("%d",*it);
}
printf("\n");
set<int>::iterator it=st.find(5);
printf("%d",*it);
printf("\n");
st.erase(st.find(5));
st.erase(5);
for(set<int>::iterator it=st.begin();it!=st.end();it++)
{
printf("%d",*it);
}
printf("\n");
st.erase(st.begin(),st.end());
printf("%d\n",st.size());
st.insert(3);
st.insert(5);
st.insert(2);
st.insert(3);
printf("%d\n",st.size());
st.clear();
printf("%d\n",st.size());
return 0;
}
二、例题
1063 Set Similarity (25 分)
输入样例
3
3 99 87 101
4 87 101 5 87
7 99 101 18 5 135 18 99
2
1 2
1 3
输出样例
50.0%
33.3%
题解
#include <iostream>
#include<set>
#include<cstdio>
const int N=51;
using namespace std;
set<int> st[N];
void compare(int x,int y)
{
int totalNumber=st[y].size(),sameNumber=0;
for(set<int>::iterator it=st[x].begin();it!=st[x].end();it++)
{
if(st[y].find(*it)!=st[y].end()) sameNumber++;
else totalNumber++;
}
printf("%.1f%%\n",sameNumber*100.0/totalNumber);
}
int main()
{
int n,k,q,v,st1,st2;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&k);
for(int j=0;j<k;j++)
{
scanf("%d",&v);
st[i].insert(v);
}
}
scanf("%d",&q);
for(int i=0;i<q;i++)
{
scanf("%d%d",&st1,&st2);
compare(st1,st2);
}
return 0;
}