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
2018-06-03 23:07:17+0900
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
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