题目:http://acm.gdufe.edu.cn/Problem/read/id/1070
上班打卡
Time Limit: 2000/1000ms (Java/Others)
Problem Description:
某公司上班使用打卡制度,员工需要在打卡机器上打入和打出才算上班。每个员工都有自己对应编号K,编号为一个整数(1 <= K <=50000),某天有一员工忘记了一次打出。现在给你当天员工的打卡信息,你能找出该员工的编号吗?
Input:
输入包含多组测试,第一行包含数字N,表示公司的人数(1<=N<=50000)。第二行有2N-1个数,两两之间有空格,表示所有员工的打卡记录。输入N为0则退出程序,不做输出。
Output:
对于每组测试,单独一行输出忘记打卡员工的编号。
Sample Input:
4 10 12 9 12 250 9 10
Sample Output:
250
思路:原本想了两种方法都超时了。。。这个是使用两个数组,员工打卡一次,对应序号+1,结束后如果数组中某元素为1,则对应序号的员工忘记打卡了
难度:容易超时,有难度
代码:
1 #include<stdio.h> 2 int main() 3 { 4 int n,a[100000],i,j; 5 int b[50000]={0}; 6 while(~scanf("%d",&n)) 7 { 8 if(n==0) break; 9 for(i=0;i<2*n-1;i++) 10 { 11 scanf("%d",&a[i]); 12 j=a[i]-1; 13 b[j]++; 14 } 15 for(i=0;i<50000;i++) 16 if(b[i]==1) 17 { 18 printf("%d ",i+1); 19 break; 20 } 21 } 22 return 0; 23 }