模板题。
#include
using namespace std;
int n, t;
set<int> s;
int main()
{
ios::sync_with_stdio(false);
while(cin>>n)
{
//int cnt=0;
s.clear();
for(int i=1; i<=n; i++)
{
cin>>t;
s.insert(t);
}
cout<<s.size()<<endl;
set<int>::iterator it;
for(it=s.begin(); it!=s.end(); it++)
{
if(it==s.begin())
cout<<*it;
else cout<<" "<<*it;
}
cout<<endl;
}
return 0;
}
去重并排序。
//#pragma GCC optimize(2)
#include
using namespace std;
int n, k;
bool flag=0;
set<int> num;
int main()
{
ios::sync_with_stdio(false);
cin>>n>>k;
while(n--)
{
int tmp;
cin>>tmp;
num.insert(tmp);
}
for(set<int>::iterator it=num.begin(); it!=num.end(); it++)
{
k--;
if(!k)
{
cout<<*it<<endl;
flag = 1;
break;
}
}
if(!flag) cout<<"NO RESULT"<<endl;
return 0;
}
也可以不使用set,改使用unique函数,注意要先排序后去重(unique去重比较相邻)。
#include
using namespace std;
int n, k, a[10010];
int main()
{
ios::sync_with_stdio(false);
cin>>n>>k;
for(int i=0; i<n; i++)
cin>>a[i];
sort(a, a+n);
int t=unique(a, a+n)-a;
if(k<=t) cout<<a[k-1]<<endl;
else cout<<"NO RESULT"<<endl;
return 0;
}
模板题。
#include
using namespace std;
set<string> words;
int main()
{
ios::sync_with_stdio(false);
int n, flag;
string str;
cin>>n;
while(n--)
{
cin>>flag;
if(!flag)
{
cin>>str;
words.insert(str);
}
else
{
cin>>str;
if(words.count(str)) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}
return 0;
}
#include
using namespace std;
int n, m;
int main()
{
ios::sync_with_stdio(false);
set<int> train;
cin>>n;
while(n--)
{
cin>>m;
if(train.empty() || m>*train.rbegin())
train.insert(m);
else
{
train.erase(train.upper_bound(m));
train.insert(m);
}
}
cout<<train.size()<<endl;
return 0;
}
//#pragma GCC optimize(2)
#include
using namespace std;
int main()
{
ios::sync_with_stdio(false);
set<int> sj[55];
set<int>::iterator it;
int n, m, num, k, num1, num2;
cin>>n;
for(int i=1; i<=n; i++)
{
cin>>m;
while(m--)
{
cin>>num;
sj[i].insert(num);
}
}
cin>>k;
while(k--)
{
int cnt=0;
cin>>num1>>num2;
for(it=sj[num1].begin(); it!=sj[num1].end(); it++)
if(sj[num2].find(*it)!=sj[num2].end())
cnt++;
int ans = sj[num1].size()+sj[num2].size();
printf("%.2lf%%\n", 1.0*cnt/(ans-cnt)*100);
}
return 0;
}
由于数据问题卡在for和while循环上了,将while(p--)
改为for(int i=1; i<=p; i++)
即从TLE变为AC。
#pragma GCC optimize(2)
#include
using namespace std;
int n, m, p, pi;
int k, typee, q, qi;
set<int> stu[1010], tiku, usetiku;
set<int>::iterator it;
int main()
{
ios::sync_with_stdio(false);
cin>>n>>m;
//freopen("tmpdata.out","r",stdin);
//freopen("data.out","w",stdout);
//scanf("%d%d", &n, &m);
for(int i=1; i<=m; i++) tiku.insert(i); // 录入题库
for(int i=1; i<=n; i++)
{
//stu[i].clear();
cin>>p;
//scanf("%d", &p);
//while(p--)
for(int j=1;j<=p;j++)
{
cin>>pi;
//scanf("%d", &pi);
stu[i].insert(pi);
}
}
cin>>k;
//scanf("%d", &k);
while(k--)
{
usetiku = tiku; // 维护题库
cin>>typee>>q;
///scanf("%d%d", &typee, &q);
if(typee) // Train
{
//while(q--)
for(int i=1;i<=q;i++)
{
cin>>qi;
//scanf("%d", &qi);
for(it=usetiku.begin(); it!=usetiku.end(); )
// 在题库中找训练题
{
//if(!stu[qi].count(*it)) // 有学生没做过这道题
if(!stu[qi].count(*it))
usetiku.erase(it++); // 不会作为训练用题
else it++;
}
}
}
else // Contest
{
//while(q--)
for(int i=1;i<=q;i++)
{
cin>>qi;
//scanf("%d", &qi);
for(it=usetiku.begin(); it!=usetiku.end(); )
// 在题库中找比赛题
{
if(stu[qi].count(*it)) // 有学生做过这道题
usetiku.erase(it++); // 不会作为比赛用题
else it++;
}
}
}
for(it=usetiku.begin(); it!=usetiku.end(); it++)
//printf("%d ", *it);
cout<<*it<<" ";
cout<<endl;
//printf("\n");
}
return 0;
}
//#pragma GCC optimize(2)
#include
using namespace std;
int n, x, maxn;
set<int> vis;
map<int, int> num;
int main()
{
ios::sync_with_stdio(false);
cin>>n;
while(n--)
{
cin>>x;
vis.insert(x);
maxn = max(maxn, x);
num[x]++;
}
int cnt=0;
for(set<int>::iterator it=vis.begin(); it!=vis.end(); it++)
{
int tmp = num[*it];
num[*it] = tmp%2;
if(!num[*it]) cnt++;
int k=tmp/2;
if(!num[*it+1] && k!=0)
{
vis.insert(*it+1);
maxn = max(maxn, *it+1);
}
num[*it+1] += k;
}
cout<<maxn+1-vis.size()+cnt<<endl;
return 0;
}