QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#857397 | #9768. A + B = C Problem | hos_lyric | WA | 1ms | 3968kb | C++14 | 4.3kb | 2025-01-15 17:16:25 | 2025-01-15 17:16:25 |
Judging History
answer
#include <cassert>
#include <cmath>
#include <cstdint>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <functional>
#include <iostream>
#include <limits>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>
using namespace std;
using Int = long long;
template <class T1, class T2> ostream &operator<<(ostream &os, const pair<T1, T2> &a) { return os << "(" << a.first << ", " << a.second << ")"; };
template <class T> ostream &operator<<(ostream &os, const vector<T> &as) { const int sz = as.size(); os << "["; for (int i = 0; i < sz; ++i) { if (i >= 256) { os << ", ..."; break; } if (i > 0) { os << ", "; } os << as[i]; } return os << "]"; }
template <class T> void pv(T a, T b) { for (T i = a; i != b; ++i) cerr << *i << " "; cerr << endl; }
template <class T> bool chmin(T &t, const T &f) { if (t > f) { t = f; return true; } return false; }
template <class T> bool chmax(T &t, const T &f) { if (t < f) { t = f; return true; } return false; }
#define COLOR(s) ("\x1b[" s "m")
#include <chrono>
#ifdef LOCAL
mt19937_64 rng(58);
#else
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
#endif
int Lcm(int a, int b) {
return a / __gcd(a, b) * b;
}
void exper() {
constexpr int N = 8;
vector<string> S[N + 1];
for (int n = 1; n <= N; ++n) {
for (int p = 0; p < 1 << n; ++p) {
string s(n, '?');
for (int i = 0; i < n; ++i) s[i] = '0' + (p >> i & 1);
if ([&]() -> bool {
for (int m = 1; m < n; ++m) if (n % m == 0) {
bool ok = true;
for (int i = 0; i < n; ++i) ok = ok && (s[i % m] == s[i]);
if (ok) return false;
}
return true;
}()) S[n].push_back(s);
}
cerr<<"|S[n]| = "<<S[n].size()<<endl;
}
for (int A = 1; A <= N; ++A) for (int B = 1; B <= N; ++B) for (int C = 1; C <= N; ++C) {
const int L = Lcm(Lcm(A, B), C);
const bool brt = [&]() -> bool {
for (const string &sa : S[A]) for (const string &sb : S[B]) for (const string &sc : S[C]) {
bool ok = true;
for (int i = 0; i < L; ++i) if ((sa[i % A] - '0') ^ (sb[i % B] - '0') ^ (sc[i % C] - '0')) {
ok = false;
break;
}
if (ok) return true;
}
return false;
}();
if (A == 2 && B == 2 && C == 2) {
assert(!brt);
} else if (Lcm(B, C) % A == 0 && Lcm(C, A) % B == 0 && Lcm(A, B) % C == 0) {
if (!brt) {
cerr << "FAIL " << A << " " << B << " " << C << ": " << brt << endl;
}
assert(brt);
} else {
assert(!brt);
}
}
}
int main() {
// exper();
for (int numCases; ~scanf("%d", &numCases); ) { for (int caseId = 1; caseId <= numCases; ++caseId) {
int N[3];
for (int u = 0; u < 3; ++u) {
scanf("%d", &N[u]);
}
int L[3];
bool good = true;
for (int u = 0; u < 3; ++u) {
L[u] = Lcm(N[(u + 1) % 3], N[(u + 2) % 3]);
good = good && (L[u] % N[u] == 0);
}
if (!(N[0] == 2 && N[1] == 2 && N[2] == 2) && good) {
string ans[3];
vector<int> fail[3];
for (int u = 0; u < 3; ++u) {
ans[u].assign(N[u], '0');
fail[u].assign(N[u] + 1, -1);
}
for (; ; ) {
for (int u = 0; u < 3; ++u) {
for (int i = 0; i < L[u]; ++i) {
if (rng() & 1) {
for (int v = 0; v < 3; ++v) ans[v][i % N[v]] ^= 1;
}
}
}
bool ok = true;
for (int u = 0; u < 3; ++u) {
int j = -1;
for (int i = 0; i < N[u]; ++i) {
for (; ~j && ans[u][j] != ans[u][i]; j = fail[u][j]) {}
fail[u][i + 1] = ++j;
}
int per = N[u] - fail[u][N[u]];
if (N[u] % per != 0) per = N[u];
if (per != N[u]) {
ok = false;
break;
}
}
if (ok) break;
}
puts("YES");
for (int u = 0; u < 3; ++u) {
puts(ans[u].c_str());
}
} else {
puts("NO");
}
}
#ifndef LOCAL
break;
#endif
}
return 0;
}
詳細信息
Test #1:
score: 0
Wrong Answer
time: 1ms
memory: 3968kb
input:
2 2 3 6 2 3 5
output:
YES 10 100 010110 NO
result:
wrong answer Incorrect solution, A+B!=C (test case 1)