QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#246075 | #4669. Genetic Modifications | Judgelight | RE | 0ms | 0kb | C++14 | 2.0kb | 2023-11-10 16:03:40 | 2023-11-10 16:03:41 |
answer
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int N=1e5+10;
char a[N],b[N];
int n,m,nex[N][2];
int f1[25][N],las1[25][N];
void solve1(int i,int j){
if(i==1){
printf("%d ",j);
return;
}
solve1(i-1,las1[i-1][j-1]);
printf("%d ",j);
}
void deal1(){
if(a[1]==b[1]){
for(int i=1;i<nex[1][a[1]^1]==0?n+1:nex[1][a[1]^1];++i)
f1[1][i]=1;
}
else
f1[1][nex[0][b[1]]]=1;
for(int i=2;i<=m;++i){
for(int j=1;j<=n;++j){
if(f1[i-1][j]){
if(a[j+1]==b[i]){
++f1[i][j+1];
if(nex[j][b[i]^1])--f1[i][nex[j][b[i]^1]];
}
else{
if(nex[j][b[i]])++f1[i][nex[j][b[i]]],--f1[i][nex[j][b[i]]+1];
}
las1[i-1][j]=j;
}
else
las1[i-1][j]=las1[i-1][j-1];
}
for(int j=1;j<=n;++j)
f1[i][j]+=f1[i][j-1];
}
for(int i=n;i>=1;--i){
if(f1[m][i]&&(nex[i][0]==0||nex[i][1]==0)){
puts("YES");
solve1(m,i);
return;
}
}
puts("NO");
}
int f[2010][2010],las[2010][2010];
void solve(int i,int j){
if(i==1){
printf("%d ",j);
return;
}
solve(i-1,las[i-1][j-1]);
printf("%d ",j);
}
int main(){
scanf("%s%s",a+1,b+1);
n=strlen(a+1),m=strlen(b+1);
for(int i=1;i<=n;++i)a[i]-='A';
for(int i=1;i<=m;++i)b[i]-='A';
for(int i=n-1;i>=0;--i){
nex[i][a[i+1]]=i+1;
nex[i][a[i+1]^1]=nex[i+1][a[i+1]^1];
}
if(m<=20){
deal1();
return 0;
}
if(a[1]==b[1]){
for(int i=1;i<nex[1][a[1]^1]==0?n+1:nex[1][a[1]^1];++i)
f[1][i]=1;
}
else
f[1][nex[0][b[1]]]=1;
for(int i=2;i<=m;++i){
for(int j=1;j<=n;++j){
if(f[i-1][j]){
if(a[j+1]==b[i]){
++f[i][j+1];
if(nex[j][b[i]^1])--f[i][nex[j][b[i]^1]];
}
else{
if(nex[j][b[i]])++f[i][nex[j][b[i]]],--f[i][nex[j][b[i]]+1];
}
las[i-1][j]=j;
}
else
las[i-1][j]=las[i-1][j-1];
}
for(int j=1;j<=n;++j)
f[i][j]+=f[i][j-1];
}
for(int i=n;i>=1;--i){
if(f[m][i]&&(nex[i][0]==0||nex[i][1]==0)){
puts("YES");
solve(m,i);
return 0;
}
}
puts("NO");
return 0;
}
詳細信息
Test #1:
score: 0
Runtime Error
input:
BBAAABBAAABAAA BAAB