Codeforces 876B Divisiblity of Differences:數學【任意兩數之差為k的倍數】

Leohh發表於2017-10-16

題目連結:http://codeforces.com/contest/876/problem/B

題意:

  給你n個數a[i],讓你找出一個大小為k的集合,使得集合中的數兩兩之差為m的倍數。

  若有多解,輸出任意一個集合即可。

 

題解:

  若一個集合中的數,兩兩之差為m的倍數,則他們 mod m 的值均相等。

  所以O(N)掃一遍,對於每個數a:vector v[a%m].push_back(a)

  一旦有一個集合大小為k,則輸出。

 

AC Code:

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <vector>
 5 #define MAX_M 100005
 6 
 7 using namespace std;
 8 
 9 int n,k,m;
10 vector<int> v[MAX_M];
11 
12 int main()
13 {
14     cin>>n>>k>>m;
15     int a;
16     for(int i=0;i<n;i++)
17     {
18         cin>>a;
19         v[a%m].push_back(a);
20         if(v[a%m].size()==k)
21         {
22             cout<<"Yes"<<endl;
23             for(int j=0;j<v[a%m].size();j++)
24             {
25                 cout<<v[a%m][j]<<" ";
26             }
27             cout<<endl;
28             return 0;
29         }
30     }
31     cout<<"No"<<endl;
32 }

 

相關文章