Submission #1732575
Source Code Expand
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; #define fi first #define se second #define mp make_pair #define pb push_back #define fbo find_by_order #define ook order_of_key #define INF 1e9 typedef long long ll; typedef pair<ll,ll> ii; typedef vector<int> vi; typedef vector < pair<int, int> > vii; typedef long double ld; typedef tree<pair<int,int>, null_type, less<pair<int,int> >, rb_tree_tag, tree_order_statistics_node_update> pbds; typedef set<int>::iterator sit; typedef map<int,int>::iterator mit; typedef vector<int>::iterator vit; ll n, m, x, cnt_odd[100001], cnt[100001], ans; int main() { cin >> n >> m; for(int i = 0; i < n; i++){ cin >> x; cnt[x]++; if(cnt[x]%2){ cnt_odd[x%m]++; } else{ cnt_odd[x%m]--; } } if(m%2==0){ x=0; for(int i = 0; i*m <= 100000; i++){ x+=cnt[i*m]; } ans+=x/2; x=0; for(int i = 0; i*m+m/2 <= 100000; i++){ x+=cnt[i*m+m/2]; } ans+=x/2; for(int i = 1; i < m/2; i++){ x=min(cnt_odd[i],cnt_odd[m-i]); cnt_odd[i]-=x; cnt_odd[m-i]-=x; ans+=x; if(cnt_odd[i]==0 && cnt_odd[m-i]==0){ for(int j = 0; i+j*m<=100000; j++){ ans+=cnt[i+j*m]/2; } for(int j = 0; m-i+j*m<=100000; j++){ ans+=cnt[m-i+j*m]/2; } } else if(cnt_odd[i]==0){ for(int j = 0; i+j*m <= 100000; j++){ if(cnt[i+j*m]%2){ cnt[i+j*m]--; } x=min(cnt_odd[m-i],cnt[i+j*m]); ans+=x; cnt_odd[m-i]-=x; cnt[i+j*m]-=x; ans+=cnt[i+j*m]/2; } for(int j = 0; m-i+j*m <= 100000; j++){ ans+=cnt[m-i+j*m]/2; } } else{ for(int j = 0; m-i+j*m <= 100000; j++){ if(cnt[m-i+j*m]%2){ cnt[m-i+j*m]--; } x=min(cnt_odd[i],cnt[m-i+j*m]); ans+=x; cnt_odd[i]-=x; cnt[m-i+j*m]-=x; ans+=cnt[m-i+j*m]/2; } for(int j = 0; i+j*m <= 100000; j++){ ans+=cnt[i+j*m]/2; } } } } else{ x=0; for(int i = 0; i*m <= 100000; i++){ x+=cnt[i*m]; } ans+=x/2; for(int i = 1; i <= m/2; i++){ x=min(cnt_odd[i],cnt_odd[m-i]); cnt_odd[i]-=x; cnt_odd[m-i]-=x; ans+=x; if(cnt_odd[i]==0 && cnt_odd[m-i]==0){ for(int j = 0; i+j*m<=100000; j++){ ans+=cnt[i+j*m]/2; } for(int j = 0; m-i+j*m<=100000; j++){ ans+=cnt[m-i+j*m]/2; } } else if(cnt_odd[i]==0){ for(int j = 0; i+j*m <= 100000; j++){ if(cnt[i+j*m]%2){ cnt[i+j*m]--; } x=min(cnt_odd[m-i],cnt[i+j*m]); ans+=x; cnt_odd[m-i]-=x; cnt[i+j*m]-=x; ans+=cnt[i+j*m]/2; } for(int j = 0; m-i+j*m <= 100000; j++){ ans+=cnt[m-i+j*m]/2; } } else{ for(int j = 0; m-i+j*m <= 100000; j++){ if(cnt[m-i+j*m]%2){ cnt[m-i+j*m]--; } x=min(cnt_odd[i],cnt[m-i+j*m]); ans+=x; cnt_odd[i]-=x; cnt[m-i+j*m]-=x; ans+=cnt[m-i+j*m]/2; } for(int j = 0; i+j*m <= 100000; j++){ ans+=cnt[i+j*m]/2; } } } } cout << ans; return 0; }
Submission Info
Submission Time | |
---|---|
Task | D - Pair Cards |
User | vjudge3 |
Language | C++14 (GCC 5.4.1) |
Score | 700 |
Code Size | 3032 Byte |
Status | AC |
Exec Time | 32 ms |
Memory | 1792 KB |
Judge Result
Set Name | sample | all | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 700 / 700 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
sample | sample-01.txt, sample-02.txt |
all | sample-01.txt, sample-02.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, 01-26.txt, 01-27.txt, 01-28.txt, 01-29.txt, 01-30.txt, sample-01.txt, sample-02.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
01-01.txt | AC | 1 ms | 256 KB |
01-02.txt | AC | 32 ms | 1024 KB |
01-03.txt | AC | 31 ms | 1024 KB |
01-04.txt | AC | 31 ms | 1024 KB |
01-05.txt | AC | 31 ms | 1024 KB |
01-06.txt | AC | 31 ms | 1024 KB |
01-07.txt | AC | 31 ms | 1024 KB |
01-08.txt | AC | 31 ms | 1024 KB |
01-09.txt | AC | 31 ms | 1024 KB |
01-10.txt | AC | 32 ms | 1280 KB |
01-11.txt | AC | 32 ms | 1792 KB |
01-12.txt | AC | 31 ms | 1024 KB |
01-13.txt | AC | 31 ms | 640 KB |
01-14.txt | AC | 30 ms | 1024 KB |
01-15.txt | AC | 30 ms | 1024 KB |
01-16.txt | AC | 30 ms | 1024 KB |
01-17.txt | AC | 30 ms | 1024 KB |
01-18.txt | AC | 30 ms | 1024 KB |
01-19.txt | AC | 30 ms | 1152 KB |
01-20.txt | AC | 31 ms | 1792 KB |
01-21.txt | AC | 31 ms | 1024 KB |
01-22.txt | AC | 32 ms | 1152 KB |
01-23.txt | AC | 31 ms | 1024 KB |
01-24.txt | AC | 31 ms | 1024 KB |
01-25.txt | AC | 31 ms | 1280 KB |
01-26.txt | AC | 32 ms | 1792 KB |
01-27.txt | AC | 17 ms | 1792 KB |
01-28.txt | AC | 3 ms | 1792 KB |
01-29.txt | AC | 2 ms | 1280 KB |
01-30.txt | AC | 2 ms | 1152 KB |
sample-01.txt | AC | 2 ms | 1024 KB |
sample-02.txt | AC | 2 ms | 1024 KB |