Cod sursa(job #238729)

Utilizator razyelxrazyelx razyelx Data 3 ianuarie 2009 01:01:12
Problema Farfurii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <stdio.h>
FILE *in  = fopen("farfurii.in","r");
FILE *out = fopen("farfurii.out","w");

long ff[100001];
long bb[100001];

int main(){
    long long n,k,i,kk,m,ultim,sw;
    fscanf(in,"%lld %lld",&n,&k);

    for(i=1;i<=n;i++)
       ff[i] = bb[i] = i;
    kk = k;

    i=n;ultim=n;

    while(kk && i>1)

	 if(bb[i] > bb[i-1]){

	   bb[i]^=bb[i-1]^=bb[i]^=bb[i-1];

	   kk--;

	   if(bb[i-1] == ff[n])ultim = i-1;

	   i++;

	 } else i--;

    kk = k;i=ultim;sw=1;

    while(kk){

	 //if(kk && i == n)i = ultim;
	 if(i == ultim) sw = 1;
	 if(sw == n) sw = 0;

	 if(sw && ff[i] < ff[i+1]){

	     ff[i]^=ff[i+1]^=ff[i]^=ff[i+1];

	     kk--;
	     i++;
	 } else i--;

	 if(!sw && ff[i] > ff[i-1]){

	   ff[i]^=ff[i-1]^=ff[i]^=ff[i-1];
	   k--;
	   i--;
	 }

    }

    for(i=1;i<=n;i++)
       fprintf(out,"%ld ",ff[i]);


    return 0;
}