Cod sursa(job #2049333)

Utilizator mirceaisherebina mircea mirceaishere Data 27 octombrie 2017 08:22:38
Problema Tablete Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.97 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("tablete.in");
ofstream fout("tablete.out");

int n, k, i, j, s, v[1002][1002];
char saux[15];
char sir[3000000];
void transforma (int n, char s[]) {
    /// in s am valori pe pozitii de la 0 la k-1, mereu
    int k = 0;
    if (n < 10) {
        k = 1;
        s[0] = n + '0';
    } else {
        while (n!=0) {
            s[k] = n%10 + '0';
            k++;
            n /= 10;
        }
    }
    s[k] = 0;

    for (int i=0, j=k-1;i<j;i++,j--) {
        swap(s[i], s[j]);
    }

}

int main () {
    fin>>n>>k;
    if(n%2==0 && k%2==0){
        for(i=1; i<=n; i++){
            strcpy(sir, "");
            for(j=1; j<=n; j++){
                transforma((i-1)*n+j, saux);
                strcat(sir, saux);
                strcat(sir, " ");
///                fout<<(i-1)*n+j<<" ";
            }
            fout<<sir<<"\n";
        }
    }
    if(n%2==1 && k%2==0){
        s=n;
        for(i=1; i<=n; i++){
            strcpy(sir, "");
            for(j=1; j<=n; j++){
                if(j==1){
                    transforma(i, saux);
                    strcat(sir, saux);
                    strcat(sir, " ");
                }else{
                    s++;
                    transforma(s, saux);
                    strcat(sir, saux);
                    strcat(sir, " ");
                }
            }
            fout<<sir<<"\n";
        }
    }

    if(n%2==0 && k%2==1){
        for(i=1; i<=n; i++){
            for(j=1; j<=n; j++){
                v[i][j]=(i-1)*n+j;
            }
        }
        for(i=1; i<=n; i=i+2){
            for(j=2; j<=n; j++){
                swap(v[i][j], v[i+1][j-1]);
            }
        }
        for(i=1; i<=n; i++){
            strcpy(sir, "");
            for(j=1; j<=n; j++){
                transforma(v[i][j], saux);
                strcat(sir, saux);
                strcat(sir, " ");
            }
            fout<<sir<<"\n";
        }
    }
    if(n%2==1 && k%2==1){
        for(i=1; i<=n; i++){
            for(j=1; j<=n; j++){
                v[i][j]=(j-1)*n+i;
            }
        }
        j=k;
        for(i=1; i<=n; i++){
            if(v[i][j]%2==1){
                if(i==1)
                    swap(v[i][j], v[i+2][j-1]);
                else
                    swap(v[i][j], v[i-2][j+1]);
            }
        }
        for(i=1; i<n; i++){
            for(j=i+1; j<=n; j++){
                if(v[i][k+1]>v[j][k+1]){
                    swap(v[i][k+1],v[j][k+1]);
                }
                if(v[i][k]>v[j][k]){
                    swap(v[i][k],v[j][k]);
                }
            }
        }
        for(i=1; i<=n; i++){
            strcpy(sir, "");
            for(j=1; j<=n; j++){
                transforma(v[i][j], saux);
                strcat(sir, saux);
                strcat(sir, " ");
            }
            fout<<sir<<"\n";
        }
    }


}