Cod sursa(job #1395280)

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

struct pack{
    int val, pozitie;
};
struct pack v[DMAX];

int p;
unsigned long long int sum;

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)
    {
        v[i].pozitie=i;
        fscanf(fin, "%d", &v[i].val);
    }
    fclose(fin);
}

void rez()
{
    int i, poz, poz2;
    struct pack aux;
    for (i=1; i<=p; ++i)
        sum+=v[i].val;

    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].val;
        sum+=v[poz].val;

        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 ", v[i].pozitie);
    fprintf(fout, "\n");
    fclose(fout);
    return;
}