Submission #1004568
Source Code Expand
#include "bits/stdc++.h"
using namespace std;
#define rep(i,n) for(int (i)=0;(i)<(int)(n);++(i))
#define rer(i,l,u) for(int (i)=(int)(l);(i)<=(int)(u);++(i))
#define reu(i,l,u) for(int (i)=(int)(l);(i)<(int)(u);++(i))
static const int INF = 0x3f3f3f3f; static const long long INFL = 0x3f3f3f3f3f3f3f3fLL;
typedef vector<int> vi; typedef pair<int, int> pii; typedef vector<pair<int, int> > vpii; typedef long long ll;
template<typename T, typename U> static void amin(T &x, U y) { if(y < x) x = y; }
template<typename T, typename U> static void amax(T &x, U y) { if(x < y) x = y; }
bool bipartiteGraphFromDegreeSequence(const vector<int> &A, const vector<int> &B, vector<pair<int,int>> &res) {
res.clear();
if(accumulate(A.begin(), A.end(), 0) != accumulate(B.begin(), B.end(), 0))
return false;
vector<pair<int, int>> As(A.size()), Bs(B.size());
rep(i, A.size()) As[i] = { A[i], i };
rep(i, B.size()) Bs[i] = { -B[i], i };
sort(As.begin(), As.end());
sort(Bs.begin(), Bs.end());
rep(i, As.size()) {
if(As[i].first > (int)Bs.size()) {
res.clear();
return false;
}
rep(j, As[i].first) {
++ Bs[j].first;
res.emplace_back(As[i].second, Bs[j].second);
}
inplace_merge(Bs.begin(), Bs.begin() + As[i].first, Bs.end());
}
rep(j, Bs.size()) if(Bs[j].first != 0) {
res.clear();
return false;
}
return true;
}
int main() {
int N;
while(~scanf("%d", &N)) {
vector<int> U(N);
for(int i = 0; i < N; ++ i)
scanf("%d", &U[i]);
vector<int> D(N);
for(int i = 0; i < N; ++ i)
scanf("%d", &D[i]);
vector<int> L(N);
for(int i = 0; i < N; ++ i)
scanf("%d", &L[i]);
vector<int> R(N);
for(int i = 0; i < N; ++ i)
scanf("%d", &R[i]);
vector<int> degA(N), degB(N);
rep(i, N) {
degA[i] = U[i] + D[i];
degB[i] = N - (L[i] + R[i]);
}
vector<pair<int, int>> edges;
if(!bipartiteGraphFromDegreeSequence(degA, degB, edges)) {
puts("NO");
continue;
}
vector<vector<int>> dir(N, vector<int>(N, 2));
for(auto &&e : edges)
dir[e.second][e.first] = 0;
rep(j, N) {
int numU = U[j];
rep(i, N) if(dir[i][j] == 0)
dir[i][j] = numU -- > 0 ? 0 : 1;
}
rep(i, N) {
int numL = L[i];
rep(j, N) if(dir[i][j] == 2)
dir[i][j] = numL -- > 0 ? 2 : 3;
}
vector<vector<pair<int,int>>> graphs[4];
rep(k, 4) graphs[k].assign(N, vector<pair<int, int>>());
rep(i, N) rep(j, N) {
graphs[0][j].emplace_back(i, j);
graphs[1][j].emplace_back(N - 1 - i, j);
graphs[2][i].emplace_back(i, j);
graphs[3][i].emplace_back(i, N - 1 - j);
}
vector<vector<bool>> used(N, vector<bool>(N)), state(N, vector<bool>(N));
function<bool(int, int)> dfs = [&](int i, int j) -> bool {
if(used[i][j]) return false;
if(state[i][j]) {
state[i][j] = false;
return true;
}
state[i][j] = true;
int cur_dir = dir[i][j];
for(auto &&e : graphs[cur_dir][cur_dir < 2 ? j : i]) {
int ni, nj; tie(ni, nj) = e;
if(i == ni && j == nj) break;
if(dfs(ni, nj)) {
dir[ni][nj] = cur_dir;
if(state[i][j]) {
state[i][j] = false;
return true;
} else {
return dfs(i, j);
}
}
}
state[i][j] = false;
used[i][j] = true;
printf("%c%d\n", "UDLR"[dir[i][j]], (dir[i][j] < 2 ? j : i) + 1);
return false;
};
rep(i, N) rep(j, N)
dfs(i, j);
}
return 0;
}
Submission Info
Submission Time |
|
Task |
J - Neue Spiel |
User |
anta |
Language |
C++14 (GCC 5.4.1) |
Score |
2100 |
Code Size |
3414 Byte |
Status |
AC |
Exec Time |
107 ms |
Memory |
6648 KB |
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:43:22: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &U[i]);
^
./Main.cpp:46:22: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &D[i]);
^
./Main.cpp:49:22: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &L[i]);
^
./Main.cpp:52:22: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &R[i]);
^
Judge Result
Set Name |
sample |
dataset1 |
dataset2 |
Score / Max Score |
0 / 0 |
2000 / 2000 |
100 / 100 |
Status |
|
|
|
Set Name |
Test Cases |
sample |
sample-01.txt, sample-02.txt |
dataset1 |
sample-01.txt, sample-02.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, 01-26.txt, 01-27.txt, 01-28.txt, 01-29.txt, 01-30.txt, 01-31.txt, 01-32.txt, 01-33.txt, 01-34.txt, 01-35.txt, 01-36.txt, 01-37.txt, 01-38.txt, 01-39.txt, 01-40.txt, 01-41.txt, 01-42.txt, 01-43.txt, 01-44.txt, 01-45.txt, 01-46.txt |
dataset2 |
sample-01.txt, sample-02.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, 01-26.txt, 01-27.txt, 01-28.txt, 01-29.txt, 01-30.txt, 01-31.txt, 01-32.txt, 01-33.txt, 01-34.txt, 01-35.txt, 01-36.txt, 01-37.txt, 01-38.txt, 01-39.txt, 01-40.txt, 01-41.txt, 01-42.txt, 01-43.txt, 01-44.txt, 01-45.txt, 01-46.txt, 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, 02-11.txt, 02-12.txt |
Case Name |
Status |
Exec Time |
Memory |
01-01.txt |
AC |
2 ms |
256 KB |
01-02.txt |
AC |
2 ms |
256 KB |
01-03.txt |
AC |
2 ms |
256 KB |
01-04.txt |
AC |
2 ms |
256 KB |
01-05.txt |
AC |
3 ms |
256 KB |
01-06.txt |
AC |
3 ms |
256 KB |
01-07.txt |
AC |
3 ms |
384 KB |
01-08.txt |
AC |
3 ms |
384 KB |
01-09.txt |
AC |
3 ms |
384 KB |
01-10.txt |
AC |
3 ms |
384 KB |
01-11.txt |
AC |
3 ms |
384 KB |
01-12.txt |
AC |
3 ms |
384 KB |
01-13.txt |
AC |
3 ms |
384 KB |
01-14.txt |
AC |
2 ms |
256 KB |
01-15.txt |
AC |
3 ms |
384 KB |
01-16.txt |
AC |
3 ms |
384 KB |
01-17.txt |
AC |
3 ms |
384 KB |
01-18.txt |
AC |
3 ms |
384 KB |
01-19.txt |
AC |
2 ms |
256 KB |
01-20.txt |
AC |
3 ms |
384 KB |
01-21.txt |
AC |
3 ms |
384 KB |
01-22.txt |
AC |
2 ms |
256 KB |
01-23.txt |
AC |
2 ms |
256 KB |
01-24.txt |
AC |
3 ms |
384 KB |
01-25.txt |
AC |
3 ms |
384 KB |
01-26.txt |
AC |
2 ms |
256 KB |
01-27.txt |
AC |
3 ms |
256 KB |
01-28.txt |
AC |
3 ms |
384 KB |
01-29.txt |
AC |
3 ms |
384 KB |
01-30.txt |
AC |
3 ms |
384 KB |
01-31.txt |
AC |
2 ms |
256 KB |
01-32.txt |
AC |
3 ms |
384 KB |
01-33.txt |
AC |
2 ms |
256 KB |
01-34.txt |
AC |
3 ms |
384 KB |
01-35.txt |
AC |
3 ms |
384 KB |
01-36.txt |
AC |
3 ms |
384 KB |
01-37.txt |
AC |
2 ms |
256 KB |
01-38.txt |
AC |
3 ms |
384 KB |
01-39.txt |
AC |
3 ms |
384 KB |
01-40.txt |
AC |
3 ms |
384 KB |
01-41.txt |
AC |
3 ms |
384 KB |
01-42.txt |
AC |
3 ms |
384 KB |
01-43.txt |
AC |
3 ms |
384 KB |
01-44.txt |
AC |
3 ms |
384 KB |
01-45.txt |
AC |
3 ms |
384 KB |
01-46.txt |
AC |
3 ms |
384 KB |
02-01.txt |
AC |
71 ms |
6268 KB |
02-02.txt |
AC |
71 ms |
6268 KB |
02-03.txt |
AC |
68 ms |
6648 KB |
02-04.txt |
AC |
73 ms |
6268 KB |
02-05.txt |
AC |
4 ms |
896 KB |
02-06.txt |
AC |
4 ms |
896 KB |
02-07.txt |
AC |
76 ms |
6268 KB |
02-08.txt |
AC |
102 ms |
6268 KB |
02-09.txt |
AC |
106 ms |
6268 KB |
02-10.txt |
AC |
87 ms |
6268 KB |
02-11.txt |
AC |
107 ms |
6268 KB |
02-12.txt |
AC |
88 ms |
6268 KB |
sample-01.txt |
AC |
2 ms |
256 KB |
sample-02.txt |
AC |
2 ms |
256 KB |