QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#244086 | #7687. Randias Permutation Task | ucup-team2432# | TL | 3ms | 3496kb | C++20 | 1.7kb | 2023-11-08 21:00:33 | 2023-11-08 21:00:33 |
Judging History
answer
#include<bits/stdc++.h>
using LL = long long;
const LL inf = 1e9;
const LL P = 998244353;
LL K = 1;
LL hash(const std::vector<int> &vec) {
LL res = 0,unit = 1;
int n = vec.size() - 1;
for (int i = 0; i < n; ++i) {
res = (res + unit * vec[i]) % P;
unit = unit * K % P;
}
return res;
}
void solve() {
std::mt19937 rnd(std::random_device{}());
K = rnd() % P;
K = std::max(K,10ll);
int n,m;std::cin >> n >> m;
std::vector pmt(m,std::vector<int>(n+1));
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
std::cin >> pmt[i][j];
}
}
std::map<LL,int> mp;
std::priority_queue<std::pair<int,std::vector<int>>,std::vector<std::pair<int,std::vector<int>>>,std::greater<>> q;
for (int i = 0; i < m; ++i) {
LL ouo = rnd() % P;
pmt[i][n] = ouo;
q.emplace(i+1,pmt[i]);
}
while (!q.empty()) {
auto [point,vec] = q.top();q.pop();
LL hsh = hash(vec);
mp[hsh] = 1;
if (point == m) continue;
q.emplace(point+1,vec);
// for (int i = 0; i < n; ++i) {
// std::cout << vec[i] << " ";
// }
// std::cout << '\n';
for (int i = 0; i < n; ++i) {
vec[i] = pmt[point][vec[i] - 1];
// std::cout << vec[i] << " ";
}
vec[n] = rnd() % P;
// std::cout << '\n';
// std::cout << '\n';
q.emplace(point+1,vec);
}
std::cout << mp.size();
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
// clock_t st = clock();
// std::cout << std::fixed << std::setprecision(12);
// freopen("test.in", "r", stdin);
// freopen("test.out", "w", stdout);
int T = 1;
// std::cin >> T;
while (T --) {
solve();
}
// std::cout << (double)(clock()-st)/CLOCKS_PER_SEC;
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 1ms
memory: 3496kb
input:
5 4 1 2 3 4 5 5 1 3 4 2 3 4 1 5 2 5 2 4 1 3
output:
8
result:
ok 1 number(s): "8"
Test #2:
score: 0
Accepted
time: 3ms
memory: 3420kb
input:
2 1 2 1
output:
1
result:
ok 1 number(s): "1"
Test #3:
score: -100
Time Limit Exceeded
input:
1 180 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...