QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#137558 | #2354. Ook | Rd_rainydays# | WA | 2ms | 7948kb | C++20 | 1.1kb | 2023-08-10 13:57:48 | 2023-08-10 13:58:58 |
Judging History
answer
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<bitset>
#define N 250003
#define ll long long
using namespace std;
bitset<N> bt,tp,pr,ppr;
char s[N],p[N];
ll dp[N];
int o,k,n,m;
ll qpow(ll x,int b){
ll ans=1;
b=min(b,60);
return (1ll<<b);
}
ll sum[N];
int main(){
scanf("%d%d",&o,&k);
scanf("%s",s+1);
n=strlen(s+1);
scanf("%s",p+1);
int m=strlen(p+1);
bt.reset();
tp.reset();
pr.reset();
ppr.reset();
for(int i=1;i<=m;i++)tp.set(i);
for(int i=1;i<=m;i++){
if(p[i]!='?')ppr.set(i);
}
for(int i=1;i<=m;i++){
if(p[i]=='k')pr.set(m-i+1);
}
for(int i=1;i<=n;i++){
if(s[i]=='k')sum[i]=sum[i-1]+k;
else sum[i]=sum[i-1]+o;
}
dp[0]=0;
for(int i=1;i<=n;i++){
bt<<=1;
if(s[i]=='k')bt.set(1);
bt&=tp;
ll kk=((bt^pr)&ppr).count();
// cout<<"err:"<<i<<" "<<kk<<endl;
dp[i]=dp[i-1];
if(i>=m)dp[i]=max(dp[i],dp[i-m]+(sum[i]-sum[i-m])/qpow(2,kk));
// cout<<"dp:"<<i<<" "<<dp[i]<<" "<<(sum[i]-sum[i-m])<<" "<<(sum[i]-sum[i-m])/qpow(2,kk)<<endl;
}
printf("%lld\n",dp[n]);
}
詳細信息
Test #1:
score: 100
Accepted
time: 2ms
memory: 7948kb
input:
2 1 ookookook koo
output:
10
result:
ok single line: '10'
Test #2:
score: 0
Accepted
time: 2ms
memory: 5908kb
input:
1 3 koooooook ?
output:
13
result:
ok single line: '13'
Test #3:
score: 0
Accepted
time: 1ms
memory: 5952kb
input:
1000 0 kookoo ook
output:
2000
result:
ok single line: '2000'
Test #4:
score: 0
Accepted
time: 0ms
memory: 5904kb
input:
21 1 ooo kkk
output:
7
result:
ok single line: '7'
Test #5:
score: 0
Accepted
time: 2ms
memory: 5884kb
input:
1 0 ookko k??ko
output:
1
result:
ok single line: '1'
Test #6:
score: 0
Accepted
time: 0ms
memory: 5888kb
input:
5 8 koookokkok oo
output:
32
result:
ok single line: '32'
Test #7:
score: -100
Wrong Answer
time: 2ms
memory: 5888kb
input:
12 13 kkokoookokkooko ?ooo??ook?k?
output:
37
result:
wrong answer 1st lines differ - expected: '18', found: '37'