QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#349380 | #8340. 3 Sum | ucup-team1055# | WA | 457ms | 48988kb | C++20 | 2.7kb | 2024-03-10 01:28:05 | 2024-03-10 01:28:06 |
Judging History
answer
#pragma once
#include <bits/stdc++.h>
#define rep(i, s, n) for (int i = (int)(s); i < (int)(n); i++)
#define rrep(i, s, n) for (int i = (int)(n)-1; i >= (int)(s); i--)
#define all(v) v.begin(), v.end()
using ll = long long;
using ld = long double;
using ull = unsigned long long;
template <typename T> bool chmin(T &a, const T &b) {
if (a <= b) return false;
a = b;
return true;
}
template <typename T> bool chmax(T &a, const T &b) {
if (a >= b) return false;
a = b;
return true;
}
using namespace std;
// isprime
bool isprime(ll n){
if (n == 1) return false;
for (ll i = 2; i * i <= n; i++){
if (n % i == 0) return false;
}
return true;
}
ll mod_pow(ll x, ll m, int P){
ll ret = 1;
ll tmp = x;
while (m > 0){
if (m&1){
ret = ret * tmp % P;
}
m >>= 1;
tmp = tmp * tmp % P;
}
return ret;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, k; cin >> n >> k;
vector<string> s(n);
rep(i,0,n){
cin >> s[i];
}
auto naosu = [&](string t) -> vector<int> {
int pr = (int)t.size();
int pl = (int)t.size() - k;
vector<int> ret(k, 0);
while(pr > 0){
vector<int> tmp(k, 0);
rep(i,max(0,pl),pr){
tmp[i-pl] = t[i] - '0';
}
int over = 0;
int gogo = 0;
rrep(i,0,k){
gogo = ret[i] + tmp[i] + over;
if (gogo >= 10){
gogo -= 10;
over = 1;
}else{
over = 0;
}
ret[i] = gogo;
}
pr -= k;
pl -= k;
}
return ret;
};
vector<vector<int>> gar;
rep(i,0,n){
gar.push_back(naosu(s[i]));
/*
rep(j,0,k){
cout << gar[i][j];
}
cout << endl;
*/
}
random_device seed_gen;
mt19937 engine(seed_gen());
uniform_int_distribution<int> dist((int)5e8, (int)1e9);
const int numpy = 4;
vector<int> pls(numpy);
rep(i,0,numpy){
do {
pls[i] = dist(engine);
}while(!isprime(pls[i]));
}
vector<vector<ll>> hashl(n, vector<ll>(numpy));
rep(i,0,n){
rep(p,0,numpy){
ll tmp = 0;
rep(j,0,k){
tmp = tmp * 10 + gar[i][j];
tmp %= pls[p];
}
hashl[i][p] = tmp;
}
}
vector miru(4, vector<ll>(numpy));
rep(i,0,numpy){
miru[1][i] = (mod_pow(10, k, pls[i]) + pls[i] - 1) % pls[i];
miru[2][i] = miru[1][i] * 2 % pls[i];
miru[3][i] = miru[1][i] * 3 % pls[i];
}
ll cnt = 0;
vector<bool> mode(4, true);
rep(i,0,n){
rep(j,i,n){
rep(l,j,n){
{
fill(mode.begin(), mode.begin() + 4, true);
rep(p,0,numpy){
ll t = hashl[i][p] + hashl[j][p] + hashl[l][p];
rep(d,0,4){
if (miru[d][p] != t) mode[d] = 0;
}
}
if (mode[0] || mode[1] || mode[2] || mode[3]){
cnt++;
}
}
}
}
}
cout << cnt << '\n';
}
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 3808kb
input:
4 1 0 1 10 17
output:
3
result:
ok 1 number(s): "3"
Test #2:
score: 0
Accepted
time: 244ms
memory: 5844kb
input:
500 859 7118711592236878297922359501613604144948355616986970837340677671376753603836852811886591300370143151943368529129749813118476151865844255212534355441611481420938483178075143062691345257288242460282715389758789648541099090735875617822348551942134616963557723055980260082230902505269975518146286...
output:
0
result:
ok 1 number(s): "0"
Test #3:
score: 0
Accepted
time: 457ms
memory: 48988kb
input:
500 17336 11871159223687829792235950161360414494835561698697083734067767137675360383685281188659130037014315194336852912974981311847615186584425521253435544161148142093848317807514306269134525728824246028271538975878964854109909073587561782234855194213461696355772305598026008223090250526997551814628...
output:
0
result:
ok 1 number(s): "0"
Test #4:
score: -100
Wrong Answer
time: 437ms
memory: 14912kb
input:
500 1 751324443898124078584847834484321089092662321556147445230263526014359393841194947303407593948729802551881289193716611867931891257925091769456350249725997883453296895094445731130479434019358742162771547784250401546380268386074363779242500860317042151185119666027858022664683818314351285215150806...
output:
2361532
result:
wrong answer 1st numbers differ - expected: '2327631', found: '2361532'