1240: 低调,低调。
Time Limit: 2 Sec Memory Limit: 1 MBSubmit: 146 Solved: 25
[Submit][Status][Web Board]
Description
Staginner总是喜欢把自已的名字写在他出的题目里。CSU-ACM协会的会长想,这孩子是不是想出名想疯了,于是决定考一考他。
任意正整数N,不大于N且与N互质的正整数个数记为P,现在给一列与N互质的正整数,只知道一些数各出现P次,而有两个数各只出现了1次,求这两个数。
会长对Staginner说,你要是解出了这个题,这道题也加上你的名字。
Staginner要求道,很多数啊,那你得跟我说两遍。
打赌的结果大家已经看到了,那么你能不能解决这个问题呢?
Input
多组数据, 每组数据两行,第一行为两个正整数N、K,2 < N < 2^11,1 < K < 2^18
第二行K个正整数X,1 < X < 2^30,第三行重复这K个数
Output
输出只出现一次的两个数,小的在前,一个空格隔开。
Sample Input
8 6
5 5 5 5 3 7
5 5 3 5 5 7
7 14
1 1 1 1 1 1 9 6 3 3 3 3 3 3
1 1 9 1 1 1 1 6 3 3 3 3 3 3
Sample Output
3 7
6 9
HINT
Source
大水题
看了以后以为要用euler函数
再看一遍你TM在逗我
直接判断哪个出现了一次好了
以为直接写就能过的
结果首先CE,一看好像这个单词time拿来命名会被OJ误判
然后MLE,把cout,cin改成scanf,printf好了
注意scanf用法 scanf(format,&a,...);
#include <stdio.h> #include <cmath> using namespace std; const int maxm = 1024; int prime[maxm]; int times[maxm]; int temp,num; int len; void init() { len = 0; for(int i =0;i<maxm;i++) { prime[i]=0; times[i]=0; } } bool exist(int n) { for(int i =0;i<len;i++) { if(prime[i]==n) return true; } return false; } int main() { int N,K; while(scanf("%d%d",&N,&K) != EOF) { init(); for(int i =0;i<K;i++) { scanf("%d",&num); if(exist(num)==false) { prime[len]=num; len++; } } for(int i =0;i<K;i++) { scanf("%d",&temp); for(int i =0;i<K;i++) { if(temp==prime[i]) { times[i]++; break; } } } int a[2]; int j = 0; for(int i =0;i<len;i++) { if(times[i]==1) { a[j]=prime[i]; j++; } if(j==2) break; } int x = a[0]<a[1]?a[0]:a[1]; int y = a[0]+a[1]-x; printf("%d %d ",x,y); } return 0; }