Submission #7512903
Source Code Expand
#include<bits/stdc++.h>
#define rep(i,m) for(long long i=0; i<m; i++)
#define per(i,m) for(long long i=m-1; i>=0; i--)
#define FOR(i,n,m) for(long long i=n; i<m; i++)
#define ROF(i,n,m) for(long long i=m-1; i>=n; i--)
#define SORT(v,n) do{sort(v,v+n);reverse(v,v+n);}while(0)
#define all(x) (x).begin(),(x).end()
#define EPS (1e-7)
#define INF (1e18)
#define PI (acos(-1))
#define dump(x) cerr << #x << " = " << (x) << endl;
#define debug(x) cerr << #x << " = " << (x) << " (L" << __LINE__ << ")" << " " << __FILE__ << endl;
using namespace std;
typedef long long ll;
const ll MOD = 1000000007;
typedef pair<ll, ll> LP;
ll POW(ll x,ll n){
x%=MOD;
if(n==0)return 1;
if(n%2==0)return POW(x*x,n/2)%MOD;
return x%MOD*POW(x,n-1)%MOD;
}
ll POW2(ll x,ll n){
if(n==0)return 1;
if(n%2==0)return POW2(x*x,n/2);
return x*POW2(x,n-1);
}
ll POW3(ll x,ll n,ll m){
x%=m;
if(n==0)return 1;
if(n%2==0)return POW3(x*x,n/2,m)%m;
return x*POW3(x,n-1,m)%m;
}
ll gcd(ll u, ll v) {
ll r;
while (0 != v) {
r = u % v; u = v; v = r;
}
return u;
}
ll lcm(ll u, ll v) {
return u*v/gcd(u,v);
}
ll KAI(ll m)
{
if(m<0) return 0;
if(m==0) return 1;
return m*KAI(m-1)%MOD;
}
ll KAI2(ll m)
{
if(m<0) return 0;
if(m==0) return 1;
return m*KAI2(m-1);
}
ll extGCD(ll a, ll b, ll &x, ll &y) {
if (b == 0) {
x = 1;
y = 0;
return a;
}
ll d = extGCD(b, a%b, y, x);
y -= a / b * x;
return d;
}
inline ll mod(ll a, ll m) {
return (a % m + m) % m;
}
ll modinv(ll a) {
ll x, y;
extGCD(a, MOD, x, y);
return mod(x, MOD);
}
ll COM(ll m,ll n)
{
if(m<n) return 0;
if(n<0) return 0;
if(n==0) return 1;
if(m==n) return 1;
return KAI(m)%MOD*modinv(KAI(n)%MOD*KAI(m-n)%MOD)%MOD;
}
ll COM2(ll m,ll n)
{
if(m<n) return 0;
if(n<0) return 0;
if(n==0) return 1;
if(m==n) return 1;
return KAI2(m)/KAI2(n)/KAI2(m-n);
}
ll DEC(ll x,ll m,ll n)//xのm進数でのx^nの位の値
{
return x%POW2(m,n+1)/POW2(m,n);
}
ll keta(ll x,ll n)//xのn進数での桁数
{
if(x==0)return 0;
return keta(x/n,n)+1;
}
ll DIV(ll x,ll n)//x!のnで割り切れる回数
{
if(x==0)return 0;
return x/n+DIV(x/n,n);
}
ll ORD(ll x,ll n)//xのnで割り切れる回数
{
if(x==0)return INF;
if(x%n!=0)return 0;
return 1+ORD(x/n,n);
}
ll SGS(ll x,ll y, ll m)//1+x+…+x^(y-1)をmで割った余り
{
if(y==0)return 0;
if(y%2==0){
return (1+POW3(x,y/2,m))*SGS(x,y/2,m)%m;
}
return (1+x*SGS(x,y-1,m))%m;
}
ll SSGS(ll x,ll y,ll m)//Σ[k=1→y](1+x+…+x^(k-1))をmで割った余り
{
if(y==0)return 0;
if(y==1)return 1;
if(y%2==0){
return (SSGS(x,y/2,m)*(POW3(x,y/2,m)+1)%m+SGS(x,y/2,m)*y/2%m)%m;
}
return (SSGS(x,y-1,m)*x%m+y)%m;
}
void shuffle(ll array[], ll size) {
for(ll i = 0; i < size; i++) {
ll j = rand()%size;
ll t = array[i];
array[i] = array[j];
array[j] = t;
}
}
struct UnionFind
{
vector<int> par;
vector<int> sizes;
UnionFind(int n) : par(n), sizes(n, 1) {
rep(i,n) par[i] = i;
}
int find(int x) {
if (x == par[x]) return x;
return par[x] = find(par[x]);
}
void unite(int x, int y) {
x = find(x);
y = find(y);
if (x == y) return;
if (sizes[x] < sizes[y]) swap(x, y);
par[y] = x;
sizes[x] += sizes[y];
}
bool same(int x, int y) {
return find(x) == find(y);
}
int size(int x) {
return sizes[find(x)];
}
};
int main(){
ll n,m,x[110000],k=0,s[110000]={},p[110000]={},q[110000]={},ans=0,u;
cin >> n >> m;
rep(i,n)cin >> x[i];
sort(x,x+n);
while(k<n){
if(s[k]==0&&x[k]==x[k+1]){
s[k]++;
s[k+1]++;
q[x[k]%m]++;
}
if(s[k]==0){
s[k]++;
p[x[k]%m]++;
}
k++;
}
ans+=p[0]/2;
p[0]%=2;
if(m%2==0){
ans+=p[m/2]/2;
p[m/2]%=2;
}
FOR(i,1,m){
if(i!=m-i){
u=min(p[i],p[m-i]);
ans+=u;
p[i]-=u;
p[m-i]-=u;
}
}
rep(i,m)ans+=q[i];
FOR(i,1,m){
u=min(q[i],p[m-i]/2);
ans+=u;
q[i]-=u;
p[m-i]-=2*u;
}
printf("%lld",ans);
}
Submission Info
Submission Time |
|
Task |
D - Pair Cards |
User |
nesya |
Language |
C++14 (GCC 5.4.1) |
Score |
700 |
Code Size |
4303 Byte |
Status |
AC |
Exec Time |
37 ms |
Memory |
3712 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 |
2 ms |
3328 KB |
01-02.txt |
AC |
37 ms |
3584 KB |
01-03.txt |
AC |
37 ms |
3584 KB |
01-04.txt |
AC |
36 ms |
3584 KB |
01-05.txt |
AC |
37 ms |
3584 KB |
01-06.txt |
AC |
37 ms |
3584 KB |
01-07.txt |
AC |
37 ms |
3584 KB |
01-08.txt |
AC |
37 ms |
3584 KB |
01-09.txt |
AC |
37 ms |
3584 KB |
01-10.txt |
AC |
37 ms |
3712 KB |
01-11.txt |
AC |
37 ms |
3712 KB |
01-12.txt |
AC |
31 ms |
3712 KB |
01-13.txt |
AC |
32 ms |
3584 KB |
01-14.txt |
AC |
37 ms |
3584 KB |
01-15.txt |
AC |
36 ms |
3584 KB |
01-16.txt |
AC |
37 ms |
3584 KB |
01-17.txt |
AC |
36 ms |
3584 KB |
01-18.txt |
AC |
37 ms |
3584 KB |
01-19.txt |
AC |
37 ms |
3584 KB |
01-20.txt |
AC |
37 ms |
3712 KB |
01-21.txt |
AC |
35 ms |
3584 KB |
01-22.txt |
AC |
35 ms |
3584 KB |
01-23.txt |
AC |
36 ms |
3584 KB |
01-24.txt |
AC |
35 ms |
3712 KB |
01-25.txt |
AC |
35 ms |
3584 KB |
01-26.txt |
AC |
36 ms |
3584 KB |
01-27.txt |
AC |
19 ms |
3200 KB |
01-28.txt |
AC |
4 ms |
2816 KB |
01-29.txt |
AC |
2 ms |
2816 KB |
01-30.txt |
AC |
2 ms |
3200 KB |
sample-01.txt |
AC |
2 ms |
2816 KB |
sample-02.txt |
AC |
2 ms |
3584 KB |