Cod sursa(job #661852)

Utilizator harababurelPuscas Sergiu harababurel Data 15 ianuarie 2012 13:15:07
Problema Tablete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <iostream>
#include <fstream>
using namespace std;
long n, k;
int a[1005][1005];
ofstream g("tablete.out");

void citire() {
	ifstream f("tablete.in");
	f>>n>>k;
	f.close();
}

void initializare() {
	int i, j, nr=0;
	for(i=1; i<=n; i++) {
		for(j=1; j<=n; j++) {
			nr++;
			a[i][j]=nr;
		}
	}
}

void rezolvare() {
	int i, j;
	long aux;
	for(i=1; i<n; i++) {
		if(a[i][k]%2==1) { //am gasit unu impar ce trebuie schimbat
			j=1;
			while(a[i+1][j]%2==1) { j++; }
			aux=a[i][k];			//schimb elementul impar de pe coloana k
			a[i][k]=a[i+1][j];		//cu primul element par de pe linia urmatoare
			a[i+1][j]=aux;
		}
	}
	//mai am de rezolvat ultima linie, unde daca am numar impar, il schimb cu ultimul de pe linia anterioara
	if(a[n][k]%2==1) {
		j=n;
		while(a[n-1][j]%2==1) { j--; }
		aux=a[n][k];
		a[n][k]=a[n-1][j];
		a[n-1][j]=aux;
	}
	//mai urmeaza sa sortez din nou toate liniile
	
	bool schimbat;
	for(i=1; i<=n; i++) {
		schimbat=1;
		while(schimbat) {
			schimbat=0;
			for(j=1; j<n; j++) {
				if(a[i][j]>a[i][j+1]) { 
					aux=a[i][j];
					a[i][j]=a[i][j+1];
					a[i][j+1]=aux;
					schimbat=1;
				}
			}
		}
	}
		
	
	
	
	
	
	
	//o afisare de proba;
	for(i=1; i<=n; i++) {
		for(j=1; j<=n; j++) {
			g<<a[i][j]<<" ";
		}
		g<<"\n";
	}
}
	
			
			



int main() {
	citire();
	initializare();
	rezolvare();
	
	g.close();
	return 0;
}