Cod sursa(job #1942309)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 27 martie 2017 21:47:06
Problema Dame Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
// solutia este luata cu tot dragul de la articolul cu solutii
// am implementat-o doar ca sa stiu sa nu mai mai apuc de asa ceva

#include <cstdio>

#define MAXN 1000

int v[MAXN+1];

int main(){
    int n;
    FILE *fin, *fout;
    fin=fopen("dame.in", "r");
    fout=fopen("dame.out", "w");
    fscanf(fin, "%d", &n);

    if(n<3) fprintf(fout, "1\n1 1\n");
    else if(n==3) fprintf(fout, "2\n1 1\n2 3\n");
    else{
        int k=0;
        for(int i=2; i<=n; i+=2)
            v[++k]=i;
        if((n%12==9)||(n%12==3)){
            for(int i=1; i<k; i++)
                v[i]=v[i+1];
            v[k]=2;
        }
        int u=k;
        for(int i=1; i<=n; i+=2)
            v[++k]=i;
        if(n%12==8){
            for(int i=u+1; i<=k; i+=2){
                int aux=v[i];
                v[i]=v[i+1];
                v[i+1]=aux;
            }
        }else if(n%12==2){
            int aux=v[u+1];
            v[u+1]=v[u+2];
            v[u+2]=aux;
            for(int i=u+3; i<k; i++)
                v[i]=v[i+1];
            v[k]=5;
        }else if((n%12==9)||(n%12==3)){
            for(int i=u+1; i<k-1; i++)
                v[i]=v[i+2];
            v[k-1]=1;
            v[k]=3;
        }
        fprintf(fout, "%d\n", n);
        for(int i=1; i<=n; i++)
            fprintf(fout, "%d %d\n", i, v[i]);
    }

    fclose(fin);
    fclose(fout);
    return 0;
}