QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#821872#9884. Grid ConstructionIllusionaryDominance#WA 1ms3516kbC++202.6kb2024-12-19 19:04:072024-12-19 19:04:07

Judging History

This is the latest submission verdict.

  • [2024-12-19 19:04:07]
  • Judged
  • Verdict: WA
  • Time: 1ms
  • Memory: 3516kb
  • [2024-12-19 19:04:07]
  • Submitted

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];
}

詳細信息

Test #1:

score: 0
Wrong Answer
time: 1ms
memory: 3516kb

input:

3 3

output:

Yes
^<<
^.v
<<v

result:

wrong answer Duplicate segment