Submission #2612836


Source Code Expand

#include <bits/stdc++.h>
using namespace std;

vector<pair<int, int> > no;
pair<int, int> pt[360005];
bool in[605][605];
int n, d1, d2, X;

int f(pair<int, int> a)
{
	int x = max(a.first%(2*X), a.second%(2*X));
	if (X == 1000) x = (a.first-n)*(a.first-n)+(a.second-n)*(a.second-n);
	else if (X > 2*n) x = a.first*a.first+a.second*a.second;
	return x;
}

bool slv()
{
	vector<pair<int, int> > ans;
	for (int i = 0;i < 4*n*n;i++)
	{
		auto u = pt[i];
		bool ok = true;
		for (auto v: no)
		{
			if (u.first-v.first >= 0 && u.second-v.second >= 0 && in[u.first-v.first][u.second-v.second]) ok = false;
			if (u.first-v.first >= 0 && u.second+v.second < 2*n && in[u.first-v.first][u.second+v.second]) ok = false;
			if (u.first+v.first < 2*n && u.second-v.second >= 0 && in[u.first+v.first][u.second-v.second]) ok = false;
			if (u.first+v.first < 2*n && u.second+v.second < 2*n && in[u.first+v.first][u.second+v.second]) ok = false;
		}
		if (ok)
		{
			ans.push_back(u);
			in[u.first][u.second] = true;
			if (ans.size() == n*n) break;
		}
	}
	if (ans.size() == n*n)
	{
		for (auto u: ans) printf("%d %d\n", u.first, u.second);
		return true;
	}
	for (int i = 0;i < 2*n;i++) for (int j = 0;j < 2*n;j++) in[i][j] = false;
	return false;
}

int main()
{
	scanf("%d%d%d", &n, &d1, &d2);
	for (int i = 0;i < 2*n;i++) for (int j = 0;j < 2*n;j++) pt[i*2*n+j] = make_pair(i, j);
	for (int i = 0;i < 2*n;i++) for (int j = 0;j < 2*n;j++) if (i*i+j*j == d1 || i*i+j*j == d2) no.emplace_back(i, j);
	while (true)
	{
		X++;
		if (2*X*X >= d1 || 2*X*X >= d2 || X >= 2*n) break;
		bool ok = true;
		for (int i = 0;i < 2*n;i++) for (int j = 0;j < 2*n;j++) if (i%(2*X)<X && j%(2*X)<X) for (auto d: no)
		{
			int I = i+d.first, J = j+d.second;
			if (I >= 0 && I < 2*n && J >= 0 && J < 2*n && I%(2*X)<X && J%(2*X)<X) ok = false;
		}
		if (ok) break;
	}
	if (slv()) goto done;
	sort(pt, pt+4*n*n, [](pair<int, int> a, pair<int, int> b)->bool {
		return f(a) < f(b);
	});
	if (slv()) goto done;
	X = 601;
	sort(pt, pt+4*n*n, [](pair<int, int> a, pair<int, int> b)->bool {
		return f(a) < f(b);
	});
	if (slv()) goto done;
	X = 1;
	while (true)
	{
		sort(pt, pt+4*n*n, [](pair<int, int> a, pair<int, int> b)->bool {
			return f(a) < f(b);
		});
		if (slv()) goto done;
		X++;
	}
	//while (!slv()) random_shuffle(pt, pt+4*n*n);
done:
	/*freopen("vis.txt", "w", stdout);
	for (int i = 0;i < 2*n;i++)
	{
		for (int j = 0;j < 2*n;j++) printf("%c", in[i][j]?'X':' ');
		printf("\n");
	}*/
	return 0;
}

Submission Info

Submission Time
Task D - Choosing Points
User jerrym
Language C++14 (GCC 5.4.1)
Score 800
Code Size 2569 Byte
Status AC
Exec Time 1519 ms
Memory 5852 KiB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:49:31: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d%d", &n, &d1, &d2);
                               ^

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 800 / 800
Status
AC × 2
AC × 46
Set Name Test Cases
Sample sample01.txt, sample02.txt
All sample01.txt, sample02.txt, extra00.txt, extra01.txt, extra02.txt, extra03.txt, extra04.txt, extra05.txt, extra06.txt, extra07.txt, extra08.txt, extra09.txt, extra10.txt, extra11.txt, extra12.txt, extra13.txt, extra14.txt, extra15.txt, extra16.txt, extra17.txt, extra18.txt, extra19.txt, extra20.txt, in01.txt, in02.txt, in03.txt, in04.txt, in05.txt, in06.txt, in07.txt, in08.txt, in09.txt, in10.txt, in11.txt, in12.txt, in13.txt, in14.txt, in15.txt, in16.txt, in17.txt, in18.txt, in19.txt, in20.txt, in21.txt, sample01.txt, sample02.txt
Case Name Status Exec Time Memory
extra00.txt AC 146 ms 4596 KiB
extra01.txt AC 195 ms 4596 KiB
extra02.txt AC 698 ms 5800 KiB
extra03.txt AC 1004 ms 5840 KiB
extra04.txt AC 392 ms 4596 KiB
extra05.txt AC 185 ms 4852 KiB
extra06.txt AC 176 ms 4596 KiB
extra07.txt AC 704 ms 5832 KiB
extra08.txt AC 1519 ms 5852 KiB
extra09.txt AC 216 ms 4596 KiB
extra10.txt AC 647 ms 4724 KiB
extra11.txt AC 258 ms 4852 KiB
extra12.txt AC 624 ms 4852 KiB
extra13.txt AC 254 ms 4596 KiB
extra14.txt AC 485 ms 4596 KiB
extra15.txt AC 171 ms 4596 KiB
extra16.txt AC 472 ms 4724 KiB
extra17.txt AC 492 ms 4852 KiB
extra18.txt AC 500 ms 4724 KiB
extra19.txt AC 512 ms 4596 KiB
extra20.txt AC 19 ms 4724 KiB
in01.txt AC 25 ms 4852 KiB
in02.txt AC 122 ms 4536 KiB
in03.txt AC 26 ms 4084 KiB
in04.txt AC 24 ms 4084 KiB
in05.txt AC 138 ms 5816 KiB
in06.txt AC 23 ms 4724 KiB
in07.txt AC 31 ms 4596 KiB
in08.txt AC 41 ms 4852 KiB
in09.txt AC 57 ms 1852 KiB
in10.txt AC 182 ms 5668 KiB
in11.txt AC 26 ms 4596 KiB
in12.txt AC 27 ms 4468 KiB
in13.txt AC 27 ms 4212 KiB
in14.txt AC 29 ms 4852 KiB
in15.txt AC 121 ms 4728 KiB
in16.txt AC 27 ms 4724 KiB
in17.txt AC 35 ms 4724 KiB
in18.txt AC 26 ms 4724 KiB
in19.txt AC 20 ms 4724 KiB
in20.txt AC 28 ms 4724 KiB
in21.txt AC 35 ms 4724 KiB
sample01.txt AC 1 ms 256 KiB
sample02.txt AC 1 ms 256 KiB