题解 P4325 【[COCI2006-2007#1] Modulo】

kradcigam

2019-09-19 21:32:36

Solution

## 第$1$种方法 也是最暴力的一种 我们熟知,$c++$中的$set$可以既去重,有排序,这题,我们可以用set来搞,虽然我们不需要排序的功能,但毕竟方便,一共是$10$个数,所以暴力一点也没事 时间复杂度是$O(\log2{n})$ $code:$ ```cpp #include <bits/stdc++.h> using namespace std; set<int>a; int main(){ for(int i=1;i<=10;i++){ int x; cin>>x; a.insert(x%42); }cout<<a.size(); return 0; } ``` ## 第$2$种方法 用$c++$中的函数实现 我们知道$c++$中有一个函数叫$unique$,时间复杂度是$O(\log2{n})$ 所以亮$code$ $code:$ ```cpp #include <bits/stdc++.h> using namespace std; int a[15]; int main(){ for(int i=1;i<=10;i++)cin>>a[i]; sort(a+1,a+n+1); int ans=unique(a+1,a+10+1)-a; cout<<ans; return 0; } ``` ## 第$3$种方法 哈希 用$h$数组记录这个数有没有存过 ```cpp #include <bits/stdc++.h> using namespace std; int h[110],s; int main(){ for(int i=1;i<=10;i++){ int x; cin>>x; if(++h[x%42]==1)s++; } cout<<s; return 0; } ``` 或者之后再扫一遍 ```cpp #include <bits/stdc++.h> using namespace std; int h[110],s; int main(){ for(int i=1;i<=10;i++){ int x; cin>>x; h[x%42]++; } for(int i=0;i<41;i++)//余数是从0到41 if(h[i])s++; cout<<s; return 0; } ``` 介绍了这$3$种方法,希望大家能点赞,欢迎评论!