Cod sursa(job #1395257)

Utilizator bullseYeIacob Sergiu bullseYe Data 21 martie 2015 10:39:24
Problema Congr Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <cstdio>
#include <cstdlib>
#include <ctime>
#define DMAX 600010
using namespace std;

int p, v[DMAX], sum;
int pozitii[DMAX];

void citire();
void rez();
void afisare();

int main()
{
    srand(time(NULL));
    citire();
    rez();
    afisare();
    return 0;
}

void citire()
{
    int i;
    FILE*fin=fopen ("congr.in", "r");
    fscanf(fin, "%d", &p);
    for (i=1; i<2*p; ++i)
    {
        pozitii[i]=i;
        fscanf(fin, "%d", &v[i]);
    }
    fclose(fin);
}

void rez()
{
    int i, poz, poz2, aux;
    for (i=1; i<=p; ++i)
        sum+=v[i];
    if (sum%p==0)//awsum
        return;
    while (1)
    {
        //aleg o pozitie random
        poz=rand()%p+1;
        poz2=rand()%p+(2*p-1)-(p+1)+1;
        aux=v[poz];
        v[poz]=v[poz2];
        v[poz2]=aux;
        sum-=v[poz2];
        sum+=v[poz];

        aux=pozitii[poz];
        pozitii[poz]=pozitii[poz2];
        pozitii[poz2]=aux;
        if (sum%p==0) break;
    }
    return;
}

void afisare()
{
    int i;
    FILE*fout=fopen ("congr.out", "w");
    for (i=1; i<=p; ++i)
        fprintf(fout, "%d ", pozitii[i]);
    fprintf(fout, "\n");
    fclose(fout);
    return;
}