Cod sursă (job #237647)

Utilizator avatar StefanPitur Stefan Pitur StefanPitur IP ascuns
Problemă Domino Compilator c | 1,66 kb
Rundă Simulare olimpiada clasele 7/8 grea Status evaluat
Dată 20 apr. 2016 16:51:50 Scor 32
#include <stdio.h>
#include <stdlib.h>

int v[20001];

int pozcmax(int i, int x, int rotea){
    int pas;
    if(rotea)
        pas=1;
    else
        pas=2;
    int indmax=i,cimax=0,j,vecj,vecim;
    for(j=i;j<i+2*x;j++){
        if(v[j]>cimax){
            indmax=j;
            cimax=v[j];
        }
        else{
            if(v[j]==cimax && rotea){
                if(j%2==0)
                    vecj=v[j-1];
                else
                    vecj=v[j+1];
                if(indmax%2==0)
                    vecim=v[indmax-1];
                else
                    vecim=v[indmax+1];
                if(vecj>vecim){
                    indmax=j;
                    cimax=v[j];
                }
            }
        }
    }
    return indmax;
}

int main()
{
    FILE *fin, *fout;
    int n,k2,rotea,i,indice,aux,j;
    fin=fopen("domino.in","r");
    fout=fopen("domino.out","w");
    fscanf(fin,"%d %d %d",&n,&rotea,&k2);
    for(i=1;i<=2*n;i++)
        fscanf(fin,"%d",&v[i]);
    i=1;
    while(k2 && i+(k2*2)<=2*n){
        //printf("PENTRU i = %d ",i);
        indice=pozcmax(i,k2+1,rotea);
        //printf(" AVEM %d\n",indice);
        if(rotea && indice%2==0){
            aux=v[indice];
            v[indice]=v[indice-1];
            v[indice-1]=aux;
            rotea--;
        }
        k2=k2-(indice-i)/2;
        for(j=i;j<indice-(indice+1)%2;j++)
            v[j]=-1;
        i=indice+1+indice%2;
    }
    if(k2!=0)
        for(;i<=2*n;i++)
            v[i]=-1;
    for(i=1;i<=2*n;i++)
        if(v[i]!=-1)
            fprintf(fout,"%d",v[i]);
    fclose(fin);
    fclose(fout);
    return 0;
}