P2148 -- 小添添的灰机猫
时间限制:1000MS
内存限制:131072KB
Description
成功从WTM晋升为ACM的小添添越来越SXBK了,开始将魔爪伸向了自己的灰H机J猫。事情是这样的,小添添有k只猫,分别是0~k-1。他先用rand() % k随机出了N个数,告诉你他需要临幸的灰机猫的编号,如果一只猫多次出现,也只算一次。因为小添添一开始就按照自己喜欢的顺序排好了编号,所以选出来的猫的顺序不能乱。请告诉他他将临幸哪些灰机猫。
Input Format
第一行输入两个正整数N和k,表示有题目中的N和k。
第二行有N个正整数,为rand() % k的结果。
Output Format
第一行一个整数,表示选出的猫的个数。
第二行为选出的猫的编号,数字之间用空格隔开
Sample Input
3 5 2 3 3
Sample Output
2 2 3
Hint
【题解】
这题是一个练习STL_set的好题目啊,特别要学会iterator怎么使用
1 #include <bits/stdc++.h> 2 using namespace std; 3 set<int> t; 4 char B[1<<15],*S=B,*T=B; 5 char getchar2() { 6 return S==T&&(T=(S=B)+fread(B,1,1<<15,stdin),S==T)?0:*S++; 7 } 8 int read2() { 9 int x=0; int f=1; 10 char ch=getchar2(); 11 while(ch<'0'||ch>'9') {if(ch=='-') f=-1; ch=getchar2();} 12 while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+ch-'0'; ch=getchar2();} 13 return x*f; 14 } 15 int main() { 16 int n, x; 17 n=read2();read2(); 18 for(int k = 0; k < n; k++) { 19 x=read2(); 20 t.insert(x); 21 } 22 printf("%d ", t.size()); 23 for(set<int>::iterator i = t.begin(); i != t.end(); i++) printf("%d ", *i); 24 }