这题是一个区赛题目,主要考桶(我好像没有用到)
难度普及T2
时间限制 1000ms 内存限制 256MB
描述
可可手头上有很多游戏卡片,卡片上都有编号,这些卡片有些是重复的,他想将重复的卡片只留一张,其余的都处理掉,并且将剩下的卡片按编号从小到大排好,当然他还想知道剩下来的卡片数量。
输入
两行
第一行,一个正整数n。
第二行,n个正整数ai,两数之间有一个空格隔开,表示卡片的编号。
输出
两行
第一行,剩余卡片从小到大排列的卡片编号。
第二行,一个正整数,表示去掉重复卡片之后剩余编号不相同的卡片数量。
输入样例 1
8 8 5 5 1 6 7 6 8
输出样例1
1 5 6 7 8 5
提示
数据范围:
n<=2000000,ai<=1000
看一下代码
#include<bits/stdc++.h>
using namespace std;
int a[2000005];//看数据范围定义数组
int main(){
int i,n,j,flag=0;
cin>>n;
for(i=0;i<n;i++){
cin>>a[i];//循环输入
}
int cnt=0;//用来统计剩下的数字数量
for(i=1;i<=1000;i++){//所有可能的数字
for(j=0;j<n;j++){//遍历数组
if(flag==1){//如果这个数字已经输出
continue;//不停退出此循环
}else if(flag==0){//如果没有
if(a[j]==i){
cout<<a[j]<<" ";
cnt++;
flag=1;//标记已出现
}
}
}
flag=0;//重置,不然下一个外层循环依然会不停退出
}
cout<<endl<<cnt;//输出
return 0;
}
(这是我在CSDN的第一篇文章,请多指教)。