QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#275209#7882. Linguistics PuzzlezzzYhengWA 0ms3628kbC++142.6kb2023-12-04 15:09:462023-12-04 15:09:46

Judging History

你现在查看的是最新测评结果

  • [2023-12-04 15:09:46]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:3628kb
  • [2023-12-04 15:09:46]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;

using namespace std;

const int kMaxN = 55;

int T;

int tt;

int n;

vector<string> P, Q, QQ;

pair<int, int> cntP[kMaxN];
pair<int, int> cntQ[kMaxN];

vector<int> vec[kMaxN];

int p[kMaxN];

bool vis[kMaxN];

string ans;

int tot = 0;

void dfs(int now) {
	if (now == n) {
		if (n == 29) {
			++tot;
			cout << tot << '\n';
			exit(0);
		}
		QQ.clear();
		for (int i = 0; i < n * n; ++i) {
			string s;
			for (int j = 0; j < P[i].size(); ++j) {
				s += p[P[i][j]];
			}
			QQ.emplace_back(s);
		}
		sort(QQ.begin(), QQ.end());
		//for (string it : QQ) cout << it << ' ';
		//cout << '\n';
		if (QQ == Q) {
			ans = "";
			for (int i = 0; i < n; ++i) {
				if (p[i] < 26) ans += 'a' + p[i];
				else ans += 'A' + p[i] - 26;
			}
			return;
		}
		return;
	}
	for (auto it : vec[now]) {
		if (!vis[it]) {
			vis[it] = 1;
			p[now] = it;
			dfs(now + 1);
			if (ans != "flag") return;
			vis[it] = 0;
		}
	}
}

int main() {
	//ios::sync_with_stdio(false);
	//cin.tie(0), cout.tie(0);
	
	cin >> T;
	tt = T;
	while (T--) {
		cin >> n;
		P.clear(), Q.clear();
		for (int i = 0; i < n; ++i) {
			for (int j = 0; j < n; ++j) {
				int x = i * j;
				string s;
				if (x < n) {
					s += x;
				}
				else {
					s += x / n;
					s += x % n;
				}
				P.emplace_back(s);
			}
		}
		for (int i = 0; i < n * n; ++i) {
			string s;
			cin >> s;
			for (int i = 0; i < s.size(); ++i) {
				if (s[i] <= 'z') s[i] = s[i] - 'a';
				else s[i] = s[i] - 'A' + 26;
			}
			Q.emplace_back(s);
		}
		sort(P.begin(), P.end());
		sort(Q.begin(), Q.end());
		//for (int i = 0; i < n * n; ++i) cout << P[i] << ' ';
		//cout << '\n';
		//for (int i = 0; i < n * n; ++i) cout << Q[i] << ' ';
		//cout << '\n';
		fill(cntP, cntP + n, make_pair(0, 0));
		fill(cntQ, cntQ + n, make_pair(0, 0));
		
		for (string it : P) {
			++cntP[it[0]].first;
			if (it.size() > 1) ++cntP[it[1]].first;
		}
			//cout << "( " << i << ' ' << cntP[i].first << ' ' << cntP[i].second << '\n';
			
		for (string it : Q) {
			++cntQ[it[0]].first;
			//if (it.size() > 1) ++cntQ[it[1]].first;
		}
		if (n == 29) {
			cout << "into\n";
			return 0;
		}
			//cout << ") " << i << ' ' << cntQ[i].first << ' ' << cntQ[i].second << '\n';
		for (int i = 0; i < n; ++i) vec[i].clear();
		for (int i = 0; i < n; ++i) {
			for (int j = 0; j < n; ++j) {
				if (cntP[i] == cntQ[j]) {
					//cout << "* " << i << ' ' << j << '\n';
					vec[i].emplace_back(j);
				}
			}
		}
		ans = "flag";
		fill(vis, vis + n, 0);
		
		dfs(0);
		if (tt != 50) cout << ans << '\n';
	}
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 3628kb

input:

2
3
a b a b b b b c cc
4
d d d d d c b a d b cd cb d a cb bc

output:

flag
flag

result:

wrong answer invalid length at case #1