QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#821872 | #9884. Grid Construction | IllusionaryDominance# | WA | 1ms | 3516kb | C++20 | 2.6kb | 2024-12-19 19:04:07 | 2024-12-19 19:04:07 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const long long N = 1e6 + 10;
const long long M = 1e6 + 10;
struct edge {
int from, to;
long long w;
}eg[M << 1];
int front[N], num;
void add(int x, int y, long long w) {
eg[++ num].to = y;
eg[num].from = front[x];
front[x] = num;
eg[num].w = w;
swap(x, y);
eg[++ num].to = y;
eg[num].from = front[x];
front[x] = num;
}
int n, m, s, t;
int _front[N], dis[N];
bool bfs() {
queue<int>q;
q.push(s);
memset(dis, 0, sizeof(dis));
dis[s] = 1;
while(!q.empty()) {
long long o = q.front();
q.pop();
for (long long i = front[o]; i; i = eg[i].from) {
long long to = eg[i].to;
if(dis[to] == 0 && eg[i].w) {
dis[to] = dis[o] + 1;
q.push(to);
}
}
}
return dis[t] != 0;
}
long long dfs(int o, long long lim) {
if (o == t) return lim;
long long mins = 0;
for (int &i = _front[o]; i; i = eg[i].from) {
int to = eg[i].to;
if(eg[i].w == 0 || dis[to] != dis[o] + 1)continue;
long long now = dfs(to, min(lim - mins, eg[i].w));
if(now) {
eg[i].w -= now;
eg[((i - 1) ^ 1) + 1].w += now;
mins += now;
if(mins == lim)break;
}
}
return mins;
}
long long dinic() {
long long re = 0;
while(bfs()) {
memcpy(_front, front, sizeof(front));
re += dfs(s, 2e9);
}
return re;
}
vector<vector<char>> solve(int n, int m) {
vector<vector<char>> re(max(0, n));
if(n <= 0 || m <= 0) return re;
auto ans = solve(n - 6, m - 6);
for (int i = 0; i < n; ++ i)re[i].resize(m);
for (int i = 0; i < n; ++ i)
for (int j = 0; j < m; ++ j) re[i][j] = '.';
for (int i = 0; i < n - 6; ++ i)
for (int j = 0; j < m - 6; ++ j) re[i + 3][j + 3] = ans[i][j];
for (int i = 0; i < n - 1; ++ i) re[i][0] = '^';
for (int i = 0; i < m - 1; ++ i) re[n - 1][i] = '<';
for (int i = n - 1; i; -- i) re[i][m - 1] = 'v';
for (int i = m - 1; i; -- i) re[0][i] = '<';
for (int i = 2; i < m - 1; i += 2) re[1][i] = 'v', re[n - 2][i] = '^';
for (int i = 2; i < n - 1; i += 2) re[i][1] = '>', re[i][m - 2] = '<';
for (int i = 3; i < m - 2; i += 2) re[2][i] = '^', re[n - 3][i] = 'v';
for (int i = 3; i < n - 2; i += 2) re[i][2] = '<', re[i][m - 3] = '>';
return re;
}
int main() {
ios::sync_with_stdio(0), cin.tie(0);
int n, m;
cin >> n >> m;
if(n % 3 == 1 || m % 3 == 1 || n % 3 != m % 3 || (n & 1) == 0 || (m & 1) == 0 || (n != m)) return cout << "No", 0;
cout << "Yes\n";
vector<vector<char>> ans = solve(n, m);
for (int i = 0; i < n; ++ i, cout << "\n")
for (int j = 0; j < m; ++ j) cout << ans[i][j];
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 1ms
memory: 3516kb
input:
3 3
output:
Yes ^<< ^.v <<v
result:
wrong answer Duplicate segment