Submission #7646740


Source Code Expand

#define _USE_MATH_DEFINES
#include <iostream>
#include <string>
#include <utility>
#include <stack>
#include <vector>
#include <queue>
#include <algorithm>
#include <map>
#include <climits>
#include <set>
#include <cmath>
#include <numeric>
#include <iomanip>

using namespace std;
int X[100000];
map <int, int> mod_counts;
map <int, int> mod_same_counts;
map <int, int> counts;
int main(){ 
    int N;
    int M;
    cin >> N >> M;
    for(int i = 0; i < N; i++){
        cin >> X[i];
    }

    for(int i = 0; i < N; i++){
        if(counts.find(X[i]) != counts.end()){
            counts[X[i]] ++;
        } else {
            counts[X[i]] = 1;
        }
    }

    for(auto it = counts.begin(); it != counts.end(); it++){
        if(it->second % 2 == 1){
            if(mod_counts.find(it->first % M) != mod_counts.end()){
                mod_counts[it->first % M] ++;
            } else {
                mod_counts[it->first % M] = 1;
            }
            counts[it->first] --;
        }
    }

    for(auto it = counts.begin(); it != counts.end(); it++){
        if(it->second != 0){
            if(mod_same_counts.find(it->first % M) == mod_same_counts.end()){
                mod_same_counts[it->first % M] = 0;
            } 
            mod_same_counts[it->first % M] += it->second;
        }
    }

    int ans = 0;
    for(int i = 0; i < M; i++){
        if(mod_counts.find(i) == mod_counts.end()){
            mod_counts[i] = 0;
        }
        if(mod_same_counts.find(i) == mod_same_counts.end()){
            mod_same_counts[i] = 0;
        }
    }

    ans = (mod_counts[0] + mod_same_counts[0]) / 2;
    mod_same_counts[0] = 0;
    if(M % 2 == 0){
        ans += (mod_counts[M / 2] + mod_same_counts[M / 2]) / 2;
        mod_same_counts[M / 2] = 0;
    }
    for(int i = 1; i <= M / 2; i++){
        if(i == M - i){
            break;
        }
        if(mod_counts[i] > mod_counts[M - i]){
            ans += mod_counts[M - i];
            int left = mod_counts[i] - mod_counts[M - i];
            if(left < mod_same_counts[M - i]){
                ans += left;
                mod_same_counts[M - i] -= left;
            } else {
                ans += mod_same_counts[M - i];
                mod_same_counts[M - i] = 0;
            }
        } else {
            ans += mod_counts[i];
            int left = mod_counts[M - i] - mod_counts[i];
            if(left < mod_same_counts[i]){
                ans += left;
                mod_same_counts[i] -= left;
            } else {
                ans += mod_same_counts[i];
                mod_same_counts[i] = 0;
            }
        }
    }

    for(auto it = mod_same_counts.begin(); it != mod_same_counts.end(); it++){
        ans += it->second / 2;
    }
    cout << ans << endl;


    return 0;
}

Submission Info

Submission Time
Task D - Pair Cards
User katom
Language C++14 (GCC 5.4.1)
Score 700
Code Size 2887 Byte
Status AC
Exec Time 225 ms
Memory 14976 KB

Judge Result

Set Name sample all
Score / Max Score 0 / 0 700 / 700
Status
AC × 2
AC × 34
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 75 ms 3584 KB
01-03.txt AC 76 ms 3584 KB
01-04.txt AC 75 ms 3584 KB
01-05.txt AC 76 ms 3584 KB
01-06.txt AC 76 ms 3584 KB
01-07.txt AC 78 ms 3584 KB
01-08.txt AC 82 ms 3712 KB
01-09.txt AC 85 ms 3840 KB
01-10.txt AC 113 ms 7296 KB
01-11.txt AC 163 ms 14976 KB
01-12.txt AC 37 ms 640 KB
01-13.txt AC 84 ms 4736 KB
01-14.txt AC 86 ms 5376 KB
01-15.txt AC 88 ms 5376 KB
01-16.txt AC 90 ms 5376 KB
01-17.txt AC 98 ms 5376 KB
01-18.txt AC 98 ms 5632 KB
01-19.txt AC 106 ms 6528 KB
01-20.txt AC 225 ms 14720 KB
01-21.txt AC 51 ms 768 KB
01-22.txt AC 51 ms 768 KB
01-23.txt AC 51 ms 768 KB
01-24.txt AC 52 ms 896 KB
01-25.txt AC 71 ms 3712 KB
01-26.txt AC 120 ms 10240 KB
01-27.txt AC 177 ms 12160 KB
01-28.txt AC 68 ms 9728 KB
01-29.txt AC 25 ms 3968 KB
01-30.txt AC 108 ms 9600 KB
sample-01.txt AC 1 ms 256 KB
sample-02.txt AC 1 ms 256 KB