Cod sursa(job #369587)

Utilizator c912046Mihaila Stefan c912046 Data 28 noiembrie 2009 19:46:48
Problema Tablete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <fstream>
#include <cstdlib>
#include <ctime>

int main ()
{
	unsigned int N, K;
	//char used[1000001];
	
	std::ifstream f_in("tablete.in");
	std::ofstream f_out("tablete.out");
	
	/*std::srand(std::time(NULL));
	bool failed = false;
	for (unsigned int times=0; times<5000 && !failed; ++times) {
		N = std::rand() % 998 + 3;
		K = std::rand() % N;
		//algo
		std::memset(used, sizeof(used), 0);
		failed = false;
		*/
	f_in >> N >> K;
	
	unsigned int i,j;
	if (N%2 == 0 && K%2 == 0) {
		for (i=1; i<=N; ++i) {
			for (j=1; j<=N; ++j) f_out << (i-1)*N+j << ' ';
			f_out << '\n';
		}
	}
	else if (K%2 == 0) {
		for (i=1; i<=N; ++i) {
			for (j=1; j<=N; ++j) f_out << ( (j<=K) ? (i-1)*K+j : N*K + (i-1)*(N-K) + j-K ) << ' ';
			f_out << '\n';
		}
	}
	else { // K%2 == 1
		unsigned int at = 1, r = 0, rr = 0, at2;
		if (N%2 == 1) rr = N*K;
		at2 = N%2 == 0 ? N*K+1 : N*K+2;
		for (i=1; i<=N; ++i) {
			for (j=1; j<=N; ++j) {
				if (j < K) {
					if (r) { f_out << r << ' '; r = 0; }
					else f_out << at++ << ' ';
				}
				else if (j == K) {
					if (at%2 == 0) f_out << at++ << ' ';
					else { r=at; f_out << at+1 << ' '; at += 2; }
				}
				else {
					if (rr) { f_out << rr << ' '; rr = 0; }
					else f_out << at2++ << ' ';
				}
			}
			f_out << '\n';
		}
	}
	
	/*	for (i=1; i<=N && !failed; ++i) if (!used[i]) failed = true;
		if (failed) std::cout << "Failure for n=" << n << " k=" << k << std::endl;
		else std::cout << "Success for n=" << n << " k=" << k << std::endl;
	}*/
	f_out << std::flush;
	return 0;
}