QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#227474 | #7400. Digital Root | Crysfly | TL | 11ms | 15900kb | C++17 | 3.5kb | 2023-10-27 16:27:02 | 2023-10-27 16:27:02 |
Judging History
answer
// what is matter? never mind.
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
//#pragma GCC target("sse,sse2,sse3,sse4,popcnt,abm,mmx,avx,avx2")
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);++i)
#define Rep(i,a,b) for(int i=(a);i>=(b);--i)
#define ll long long
#define ull unsigned long long
#define int long long
using namespace std;
inline int read()
{
char c=getchar();int x=0;bool f=0;
for(;!isdigit(c);c=getchar())f^=!(c^45);
for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+(c^48);
if(f)x=-x;return x;
}
#define fi first
#define se second
#define pb push_back
#define mkp make_pair
typedef pair<int,int>pii;
typedef vector<int>vi;
#define maxn 200005
#define inf 0x3f3f3f3f
int toint(char c){
if(isdigit(c))return c&15;
return c-'a'+10;
}
int n,m,k;
char s[maxn];
int a[maxn],aa[maxn],sum[maxn][17];
int pre[17],id[17];
pii tmp[17];
int ask(int x,int l,int r){
int res=sum[r][x];
if(l>0)res-=sum[l-1][x];
return res;
}
int f[17][1<<17];
void fwt(int*f,int k){
For(i,0,k-1)
For(j,0,(1<<k)-1)
if(j>>i&1) f[j]+=f[j^(1<<i)];
}
int res0,res1[19],res10[19];
int L[maxn],R[maxn];
signed main()
{
n=read(),m=read(),k=read(),cin>>(s+1);
sum[0][0]=1;
For(i,1,n){
a[i]=a[i-1]+toint(s[i]),a[i]%=(k-1);
aa[i]=aa[i-1]+(toint(s[i])!=0);
res10[toint(s[i])]++;
For(j,0,k-2)sum[i][j]=sum[i-1][j]+(j==a[i]);
}
memset(pre,-1,sizeof pre);
For(j,0,k) id[j]=j;
For(i,1,n){
pre[toint(s[i])%(k-1)]=i;
sort(id,id+k-1,[&](int x,int y){
return pre[x]>pre[y];
});
int S=0;
For(j,0,k-2){
int r=pre[id[j]];
int l=pre[id[j+1]]+1;
l=max(l,1ll);
S|=(1<<id[j]);
if(l>r)continue;
// cout<<"i,l,r, "<<i<<" "<<l<<" "<<r<<" "<<S<<"\n";
For(x,0,k-2)
f[(a[i]-x+k-1)%(k-1)][S]+=ask(x,l-1,r-1);
}
}
int nows=1;
For(i,1,n){
if(aa[i]!=aa[i-1]) nows=0;
res0+=nows,++nows;
}
For(i,1,n){
L[i]=L[i-1];
if(toint(s[i])!=0) L[i]=i;
}
R[n+1]=n+1;
Rep(i,n,1){
R[i]=R[i+1];
if(toint(s[i])!=0) R[i]=i;
}
For(i,1,n) if(toint(s[i])!=0) {
int x=toint(s[i]);
int l=L[i-1],r=R[i+1];
res1[x]+=(i-l)*(r-i);
}
// For(i,1,n)For(j,i,n){
// int S=0,T=0;
// For(p,i,j)S|=(1<<(toint(s[p])%(k-1))),T|=(1<<toint(s[p]));
// // cout<<(a[j]-a[i-1]+k-1)%(k-1)<<" "<<S<<"\n";
// if(aa[j]-aa[i-1]==1){
// int x=0;
// For(_,1,k-1) if(T>>_&1) x=_;
// res1[x]++;
// }
// }
For(x,0,k-2) fwt(f[x],k-1);
For(_,1,m){
int y=read();
string str; cin>>str;
int S=0;
for(auto c:str){
int o=toint(c);
S|=(1<<(o%(k-1)));
}
int res=n*(n+1)/2;
For(x,0,k-2)if(x!=y%(k-1)){
// if have j,x-i+j==y
// j==y+i-x
int T=0;
For(i,0,k-2){
// cout<<(((y+i-x+k-1)%(k-1)))<<"\n";
if(!(S>>((y+i-x+k-1)%(k-1))&1)) T|=(1<<i);
}
// cout<<"x,T "<<x<<' '<<T<<" "<<f[x][T]<<"\n";
res-=f[x][T];
}
if(y==0||y==k-1){
if(y==0){
res=res0;
bool fl0=0;
for(auto c:str) if(toint(c)==0) fl0=1;
if(fl0){
For(j,1,k-1) res+=res1[j];
}
}else{
// cout<<"ans "<<res<<"\n";
bool fl=0,fl0=0;
for(auto c:str){
if(toint(c)==k-1)fl=1;
if(toint(c)==0)fl0=1;
}
if(!fl){
res-=res0;
// cout<<"QWQ "<<res<<"\n";
if(fl0){
For(j,1,k-2) {
int s1=res10[j];
int s2=res1[j]-s1;
res-=s1;
if(!(S>>(k-1-j)&1)) res-=s2;
}
}
}
}
}
cout<<res<<"\n";
}
return 0;
}
/*
5 10 5
01234
0 1
01234
*/
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 2ms
memory: 15832kb
input:
9 2 10 123456789 9 12 8 123456789
output:
24 45
result:
ok 2 tokens
Test #2:
score: 0
Accepted
time: 1ms
memory: 9752kb
input:
5 10 5 01234 0 1 1 1 2 1 3 1 4 1 0 1 1 0 2 0 3 0 4 0
output:
1 13 9 9 9 1 10 9 10 6
result:
ok 10 tokens
Test #3:
score: 0
Accepted
time: 0ms
memory: 7704kb
input:
19 6 2 0010111001010011111 0 0 0 1 0 01 1 0 1 1 1 01
output:
42 11 42 179 190 190
result:
ok 6 tokens
Test #4:
score: 0
Accepted
time: 1ms
memory: 7856kb
input:
13 21 3 1010011001002 0 0 0 1 0 10 0 2 0 20 0 21 0 012 1 0 1 1 1 01 1 2 1 20 1 12 1 021 2 0 2 1 2 01 2 2 2 02 2 12 2 102
output:
36 10 36 10 36 10 36 78 90 91 78 78 91 91 58 76 76 91 91 91 91
result:
ok 21 tokens
Test #5:
score: 0
Accepted
time: 1ms
memory: 9972kb
input:
15 60 4 313213200103021 0 0 0 1 0 01 0 2 0 20 0 21 0 021 0 3 0 30 0 31 0 103 0 23 0 032 0 321 0 0132 1 0 1 1 1 10 1 2 1 02 1 12 1 021 1 3 1 30 1 13 1 310 1 23 1 203 1 312 1 1302 2 0 2 1 2 01 2 2 2 02 2 21 2 120 2 3 2 03 2 13 2 031 2 32 2 320 2 213 2 0321 3 0 3 1 3 01 3 2 3 20 3 12 3 201 3 3 3 30 3 1...
output:
27 5 27 5 27 5 27 5 27 5 27 5 27 5 27 96 118 120 105 105 120 120 96 96 120 120 105 105 120 120 89 104 104 118 120 120 120 89 89 104 104 120 120 120 120 100 93 103 99 105 108 108 120 120 120 120 120 120 120 120
result:
ok 60 tokens
Test #6:
score: 0
Accepted
time: 1ms
memory: 9972kb
input:
14 155 5 03033201040331 0 0 0 1 0 10 0 2 0 20 0 21 0 210 0 3 0 03 0 13 0 130 0 23 0 302 0 312 0 3201 0 4 0 40 0 14 0 140 0 42 0 042 0 421 0 0421 0 43 0 043 0 341 0 0143 0 423 0 3240 0 2314 0 30214 1 0 1 1 1 01 1 2 1 20 1 12 1 012 1 3 1 30 1 13 1 103 1 32 1 203 1 213 1 1302 1 4 1 40 1 41 1 041 1 24 1...
output:
26 5 26 5 26 5 26 5 26 5 26 5 26 5 26 5 26 5 26 5 26 5 26 5 26 5 26 5 26 5 26 68 91 97 84 88 104 105 72 81 102 103 90 90 105 105 68 68 97 97 88 88 105 105 81 81 103 103 90 90 105 105 66 75 82 95 104 104 105 75 82 88 89 102 105 105 105 66 66 82 82 104 104 105 105 82 82 89 89 105 105 105 105 79 79 86 ...
result:
ok 155 tokens
Test #7:
score: 0
Accepted
time: 2ms
memory: 11768kb
input:
11 378 6 34155331452 0 0 0 1 0 10 0 2 0 20 0 21 0 201 0 3 0 03 0 13 0 301 0 32 0 203 0 231 0 2301 0 4 0 04 0 14 0 401 0 42 0 402 0 412 0 0214 0 34 0 340 0 143 0 1340 0 234 0 4032 0 1243 0 03412 0 5 0 50 0 51 0 051 0 25 0 520 0 512 0 2015 0 35 0 053 0 513 0 5301 0 352 0 5320 0 5123 0 51302 0 45 0 054...
output:
11 0 11 0 11 0 11 0 11 0 11 0 11 0 11 0 11 0 11 0 11 0 11 0 11 0 11 0 11 0 11 0 11 0 11 0 11 0 11 0 11 0 11 0 11 0 11 0 11 0 11 0 11 0 11 0 11 0 11 0 11 0 11 44 54 65 50 52 65 66 42 52 60 66 55 55 66 66 41 52 60 65 53 54 65 66 49 55 63 66 56 56 66 66 44 44 65 65 52 52 66 66 52 52 66 66 55 55 66 66 5...
result:
ok 378 tokens
Test #8:
score: 0
Accepted
time: 0ms
memory: 14064kb
input:
10 889 7 2433333441 0 0 0 1 0 01 0 2 0 20 0 21 0 210 0 3 0 03 0 13 0 301 0 32 0 032 0 123 0 3201 0 4 0 40 0 41 0 104 0 24 0 240 0 412 0 4102 0 34 0 304 0 143 0 1340 0 342 0 4320 0 2134 0 43210 0 5 0 05 0 51 0 051 0 52 0 502 0 251 0 2510 0 35 0 530 0 315 0 3510 0 253 0 0532 0 3521 0 05231 0 54 0 504 ...
output:
10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 10 0 ...
result:
ok 889 tokens
Test #9:
score: 0
Accepted
time: 4ms
memory: 14072kb
input:
12 2040 8 512641272172 0 0 0 1 0 10 0 2 0 02 0 12 0 120 0 3 0 30 0 13 0 310 0 23 0 203 0 132 0 1203 0 4 0 04 0 41 0 140 0 42 0 042 0 421 0 4102 0 43 0 043 0 143 0 0341 0 342 0 3402 0 3142 0 23410 0 5 0 05 0 51 0 501 0 25 0 502 0 251 0 1502 0 35 0 035 0 153 0 1350 0 253 0 2350 0 3125 0 31205 0 45 0 4...
output:
12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 12 0 ...
result:
ok 2040 tokens
Test #10:
score: 0
Accepted
time: 4ms
memory: 13872kb
input:
17 4599 9 05628257863606468 0 0 0 1 0 10 0 2 0 02 0 21 0 210 0 3 0 03 0 13 0 013 0 23 0 032 0 231 0 0321 0 4 0 40 0 14 0 401 0 24 0 402 0 421 0 0124 0 34 0 043 0 134 0 1403 0 243 0 2043 0 3241 0 32140 0 5 0 50 0 15 0 501 0 52 0 205 0 215 0 5210 0 35 0 350 0 153 0 0351 0 523 0 0235 0 2135 0 05321 0 5...
output:
20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 20 2 ...
result:
ok 4599 tokens
Test #11:
score: 0
Accepted
time: 11ms
memory: 15900kb
input:
12 10230 10 544253693210 0 0 0 1 0 01 0 2 0 02 0 21 0 102 0 3 0 30 0 13 0 130 0 32 0 023 0 213 0 0132 0 4 0 40 0 14 0 410 0 24 0 402 0 214 0 2014 0 43 0 043 0 431 0 4130 0 234 0 3420 0 3124 0 10423 0 5 0 05 0 15 0 105 0 52 0 250 0 251 0 1520 0 53 0 305 0 531 0 5013 0 352 0 3205 0 3251 0 12305 0 45 0...
output:
13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 ...
result:
ok 10230 tokens
Test #12:
score: -100
Time Limit Exceeded
input:
11 22517 11 88902812271 0 0 0 1 0 01 0 2 0 02 0 21 0 102 0 3 0 03 0 31 0 013 0 32 0 230 0 213 0 2310 0 4 0 40 0 14 0 014 0 42 0 042 0 241 0 1402 0 43 0 034 0 341 0 4031 0 432 0 3024 0 2413 0 13204 0 5 0 05 0 51 0 015 0 25 0 520 0 512 0 2051 0 53 0 035 0 351 0 0531 0 523 0 2305 0 5321 0 51302 0 45 0 ...
output:
13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 13 1 ...