Cod sursa(job #2566856)

Utilizator georgerapeanuRapeanu George georgerapeanu Data 3 martie 2020 13:30:21
Problema Congr Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <cstdio>
#include <cstring>
#include <chrono>
#include <cstdlib>
#include <algorithm>

using namespace std;

FILE *f = fopen("congr.in","r");
FILE *g = fopen("congr.out","w");

const int NMAX = 3e5;

int p;
pair<int,int> v[2 * NMAX + 5];
int sum;

inline int add(int a,int b){
    a += b;
    if(a >= p){
        a -= p;
    }
    return a;
}

inline int scad(int a,int b){
    a -= b;
    if(a < 0){
        a += p;
    }
    return a;
}

int main(){
    mt19937 gen(chrono::steady_clock::now().time_since_epoch().count());

    fscanf(f,"%d",&p);

    for(int i = 1;i < 2 * p;i++){
        fscanf(f,"%d",&v[i].first);
        v[i].first %= p;
        v[i].second = i;
    }

    while(true){
        shuffle(v + 1,v + 2 * p,gen);

        sum = 0;

        for(int i = 1;i < p;i++){
            sum = add(sum,v[i].first);
        }

        for(int i = p;i < 2 * p;i++){
            sum = add(sum,v[i].first);
            sum = scad(sum,v[i - p].first);
            if(sum == 0){
                for(int j = i - p + 1;j <= i;j++){
                    fprintf(g,"%d ",v[j].second);
                }
                return 0;
            }
        }
    }

    fclose(f);
    fclose(g);

    return 0;
}