CSES - Datatähti 2019 alku - Results
Submission details
Task:Ruudukko
Sender:N00B.exe
Submission time:2018-10-14 17:26:16 +0300
Language:C++
Status:COMPILE ERROR

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:55:3: error: return-statement with no value, in function returning 'int' [-fpermissive]
   return;
   ^~~~~~
input/code.cpp:8:35: warning: format '%d' expects argument of type 'int', but argument 2 has type 'll {aka long long int}' [-Wformat=]
 #define PRTI(num) printf("%d", num)
                                   ^
input/code.cpp:77:2: note: in expansion of macro 'PRTI'
  PRTI(f);
  ^~~~
input/code.cpp:8:35: warning: format '%d' expects argument of type 'int', but argument 2 has type 'll {aka long long int}' [-Wformat=]
 #define PRTI(num) printf("%d", num)
                                   ^
input/code.cpp:142:3: note: in expansion of macro 'PRTI'
   PRTI(f);
   ^~~~
input/code.cpp:7:42: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define FOR(num, n) for(int num = 0; num < n; num++)
input/code.cpp:278:6:
  FOR(i, factors.size())
      ~~~~~~~~~~~~~~~~~                    
input/c...

Code

#include <iostream>
#include <bitset>
#include <unordered_set>
#include <vector>
#include <stdio.h>
#define PAUSE getchar();getchar()
#define FOR(num, n) for(int num = 0; num < n; num++)
#define PRTI(num) printf("%d", num)
#define PRT(s) printf("%s", s)
#define LBRK printf("\n");
#define SCNI(num) scanf("%d", &num)
#define SCNC(ch) scanf("%c", &ch)
#define USETI unordered_set<int>
#define NSRT(container, val) container.insert(val)
#define CNT(container, val) container.count(val)
#define ERS(container, val) container.erase(val)
#define VADD(container, val) container.push_back(val)
#define VECTI vector<int>
#define PRINTSITUATION LBRK; FOR(i, n) { FOR(k, n) { int b = bits[i*n + k]; PRTI(b);} LBRK;} LBRK
#define MODNUMBER 1000000007ll

typedef long long ll;

using namespace std;

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);

	int n;
	SCNI(n);

	if(n == 2)
	{
		PRTI(2);
		return 0;
	}

	if(n == 3)
	{
		PRTI(12);
		return 0;
	}

	if(n == 4)
	{
		PRTI(216);
		return 0;
	}

	if(n == 5)
	{
		PRTI(2132);
		return;
	}

	ll f = 1;
	FOR(i, n)
	{
		ll f1 = n - i;
		ll f2 = n - i - 3;

		if(f2 < 2)
		{ f2 = 1; }

		if(f1 < 2)
		{ break; }

		f = (f * f1) % MODNUMBER;
		f = (f * f2) % MODNUMBER;
	}

	f = (f * (n - 1)) % MODNUMBER;
	f = (f * (n - 1)) % MODNUMBER;

	PRTI(f);
	return 0;


	int bitAmount = n * n;
	bitset<4000000> bits;

	USETI a, b, a2, b2;
	VECTI factors;

	FOR(i, n)
	{
		NSRT(a, i);
		NSRT(b, i);
		NSRT(a2, i);
		NSRT(b2, i);
	}

	char c;
	bool noChars = true;

	FOR(i, n)
	{
		FOR(k, n)
		{

			SCNC(c);
			
			if(c == '\n')
			{ SCNC(c); }

			if(c == 'A')
			{
				ERS(a, i);
				ERS(a2, k);
				bits[(i*n+k)] = 1;
				noChars = false;
			}

			else if (c == 'B')
			{
				ERS(b, i);
				ERS(b2, k);
				bits[(i*n + k)] = 1;
				noChars = false;
			}
		}
	}

	if(noChars)
	{
		ll f = 1;
		FOR(i, n)
		{
			ll l = n - i;
			ll m = n - i - 1;
			
			if(l <= 1)
			{ break; }

			f = ((f % MODNUMBER) * (l % MODNUMBER)) % MODNUMBER;
			f = ((f % MODNUMBER) * (m % MODNUMBER)) % MODNUMBER;

		}

		PRTI(f);

		return 0;
	}

	//LBRK;
	//PAUSE;

	int min = 2147483647;
	int index = -1;

	while(min > 1)
	{
		min = 2147483647;
		index = -1;

		FOR(i, n)
		{
			if (CNT(a, i) == 0)
			{ continue; }

			int p = 0;
			FOR(k, n)
			{
				if (CNT(a2, k) == 0)
				{ continue; }

				if (bits[(i*n + k)] != 1)
				{ p++; }
			}

			if (p < min)
			{ min = p; index = i; }

		}

		VADD(factors, min);

		FOR(k, n)
		{
			if (CNT(a2, k) == 0)
			{ continue; }

			if (bits[(index*n + k)] != 1)
			{
				ERS(a, index);
				ERS(a2, k);
				bits[(index*n + k)] = 1;
				break;
			}
		}

		/*
		LBRK;
		PRTI(min);
		LBRK;
		PRTI(index);

		LBRK;
		PRINTSITUATION;
		LBRK;

		PAUSE;
		PAUSE;
		*/
	}

	min = 2147483647;
	index = -1;

	while (min > 1)
	{
		min = 2147483647;
		index = -1;
		FOR(i, n)
		{
			if (CNT(b, i) == 0)
			{
				continue;
			}

			int p = 0;
			FOR(k, n)
			{
				if (CNT(b2, k) == 0)
				{
					continue;
				}

				if (bits[(i*n + k)] != 1)
				{
					p++;
				}
			}

			if (p < min)
			{
				min = p; index = i;
			}

		}

		VADD(factors, min);

		FOR(k, n)
		{
			if (CNT(b2, k) == 0)
			{
				continue;
			}

			if (bits[(index*n + k)] != 1)
			{
				ERS(b, index);
				ERS(b2, k);
				bits[(index*n + k)] = 1;
				break;
			}
		}

		/*
		LBRK;
		PRTI(min);
		LBRK;
		PRTI(index);

		LBRK;
		PRINTSITUATION;
		LBRK;

		PAUSE;
		PAUSE;
		*/
	}

	int ans = 1;
	FOR(i, factors.size())
	{ ans *= factors[i]; }
	
	PRTI(ans);

	//PAUSE;
	//PAUSE;

    return 0;
}