QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#349432 | #8340. 3 Sum | ucup-team1055# | WA | 449ms | 49340kb | C++20 | 2.9kb | 2024-03-10 01:56:16 | 2024-03-10 01:56:16 |
Judging History
answer
#pragma GCC optimize("Ofast,unroll-loops")
#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;
}
if (over == 1){
rrep(i,0,k){
gogo = ret[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 = 6;
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]) + 2 * 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;
rep(j,0,n){
map<vector<int>,int> mp;
rep(i,0,j+1){
vector<int> arg(numpy);
rep(p,0,numpy){
ll t = hashl[i][p] + hashl[j][p];
t %= pls[p];
arg[p] = t;
}
mp[arg]++;
}
rep(k,j,n){
rep(d,0,4){
vector<int> arg(numpy);
rep(p,0,numpy){
ll t = hashl[k][p];
arg[p] = miru[d][p] - t;
}
cnt += mp[arg];
}
}
}
cout << cnt << '\n';
}
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 3664kb
input:
4 1 0 1 10 17
output:
3
result:
ok 1 number(s): "3"
Test #2:
score: 0
Accepted
time: 124ms
memory: 6084kb
input:
500 859 7118711592236878297922359501613604144948355616986970837340677671376753603836852811886591300370143151943368529129749813118476151865844255212534355441611481420938483178075143062691345257288242460282715389758789648541099090735875617822348551942134616963557723055980260082230902505269975518146286...
output:
0
result:
ok 1 number(s): "0"
Test #3:
score: 0
Accepted
time: 449ms
memory: 49340kb
input:
500 17336 11871159223687829792235950161360414494835561698697083734067767137675360383685281188659130037014315194336852912974981311847615186584425521253435544161148142093848317807514306269134525728824246028271538975878964854109909073587561782234855194213461696355772305598026008223090250526997551814628...
output:
0
result:
ok 1 number(s): "0"
Test #4:
score: 0
Accepted
time: 234ms
memory: 15020kb
input:
500 1 751324443898124078584847834484321089092662321556147445230263526014359393841194947303407593948729802551881289193716611867931891257925091769456350249725997883453296895094445731130479434019358742162771547784250401546380268386074363779242500860317042151185119666027858022664683818314351285215150806...
output:
2327631
result:
ok 1 number(s): "2327631"
Test #5:
score: 0
Accepted
time: 204ms
memory: 15000kb
input:
500 2 408542968136435277974575411503179002415404345446801430469044749372949272333801248935236224652806667129749035002588943020176263162139056819871274824302889304493205266143688886696157147111754418731401856424401766968832165255416237731963027205324149660112574729610391396555581935236134531799950318...
output:
212002
result:
ok 1 number(s): "212002"
Test #6:
score: -100
Wrong Answer
time: 336ms
memory: 37736kb
input:
500 11500 75411775796562109942642493394321873284995260953010112281856775261847503626737348402159485133662757032091519863427156582689971229143089317472838196453888261138079171290535429921921548971897026706656838415620603757605079012541561774699628665865662183868374645956694140356716037674688084770628...
output:
0
result:
wrong answer 1st numbers differ - expected: '7675', found: '0'