QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#879643 | #9699. Loving You in My Humble Way | hos_lyric | AC ✓ | 10ms | 4892kb | C++14 | 2.3kb | 2025-02-02 09:43:03 | 2025-02-02 09:43:03 |
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")
constexpr int P = 43;
int N;
int ids[P][P][P];
vector<int> X, Y, Z;
bitset<P*P> adj[P*P];
int main() {
memset(ids, ~0, sizeof(ids));
for (int x = 0; x < P; ++x) for (int y = 0; y < P; ++y) for (int z = 0; z < P; ++z) if ((x*x + y*y + z*z) % P != 0) {
if (z == 1 || (y == 1 && z == 0) || (x == 1 && y == 0 && z == 0)) {
ids[x][y][z] = N++;
X.push_back(x);
Y.push_back(y);
Z.push_back(z);
}
}
cerr << "N = " << N << endl;
assert(N == P*P);
for (int u = 0; u < N; ++u) for (int v = u + 1; v < N; ++v) {
if ((X[u]*X[v] + Y[u]*Y[v] + Z[u]*Z[v]) % P == 0) {
adj[u].set(v);
adj[v].set(u);
}
}
vector<vector<int>> ans;
for (int u = 0; u < N; ++u) for (int v = u + 1; v < N; ++v) if (adj[u][v]) {
const auto both = adj[u] & adj[v];
for (int w = both._Find_next(v); w < N; w = both._Find_next(w)) {
ans.push_back({u, v, w});
}
}
printf("%d\n", (int)ans.size());
for (const auto &t : ans) {
printf("%d %d %d\n", t[0] + 1, t[1] + 1, t[2] + 1);
}
return 0;
}
这程序好像有点Bug,我给组数据试试?
详细
Test #1:
score: 100
Accepted
time: 10ms
memory: 4892kb
input:
<no-input>
output:
13244 1 2 45 1 47 1809 1 89 907 1 131 605 1 175 1381 1 219 735 1 261 303 1 345 693 1 387 821 1 429 1293 1 473 1679 1 517 1077 1 561 1425 1 649 863 1 777 1337 1 949 1767 1 991 1205 1 1035 1469 1 1121 1637 1 1163 1511 1 1249 1723 1 1553 1595 2 46 1808 2 88 906 2 130 604 2 174 1380 2 218 734 2 260 302 ...
result:
ok Correct!
Extra Test:
score: 0
Extra Test Passed