多少个元素
Description
给定Q次操作:
每次操作给定一个正整数x —— 表示向集合A和集合B里面各加入一个元素x。
集合A:允许存在相同元素
集合B:不允许存在相同元素,如果有多个相同元素只存在一个。
Input
第一行输入一个整数t,代表有t组测试数据(t <= 10)
每组数据第一行输出一个整数Q,代表操作次数。
保证:1 <= Q <= 100000,且所有元素均在int范围内。
Output
对每次操作输出两个结果,分别代表A集合里面的元素个数、B集合里面的元素个数。
Sample Input
2 2 2 2 3 1000000000 1000000001 1000000001
Sample Output
1 1 2 1 1 1 2 2 3 2
该题看着比较简单,其实如果用遍历的方法的话就一定会超时,这里用到了比较实用的map函数,该函数可以非常方便的记录出现的次数,并且不会重复,下面看代码:
#include<cstdio>
#include<cstring>
#include<map>
#include<algorithm>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int Q;
int x;
scanf("%d",&Q);
map<int,int>mapp1;//定义一个map函数,mapp1[i]以及i的类型可以任意定义//
int count1 = 0;
int count2 = 0;
for(int i =1;i<=Q;i++)
{
scanf("%d",&x);
count2++;
mapp1[x]++;//如果x出现了两次,那么mapp[x]的值就等于二//
if(mapp1[x]==1)
count1++;
printf("%d ",count2);
printf("%d\n",count1);
}
}
return 0;
}
愿你一生清澈明朗,做你愿做之事,爱你愿爱之人!