标签:不能 注意 def 插入 ++ 映射 stdout type oss
(⊙o⊙)…T1又考了原题,但上回仍然没有订正。再加上第三题sort蜜汁使用出锅,数组开小,成功爆零。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e6+10;
int T,C,n,m,cnt,ans[N],a[N],b[N],last[N],lasta[N],lastb[N],f[N];
int read(){int k;scanf("%d",&k);return k;}
int main(){
freopen("xiz.in","r",stdin);
freopen("xiz.out","w",stdout);
for(T=read(),C=read();T;T--){
n=read(),m=read();cnt=0;
memset(last,0,sizeof(last));
for(int i=1;i<=n;++i){
a[i]=read();
lasta[i]=i-last[a[i]];
last[a[i]]=i;
}
memset(last,0,sizeof(last));
for(int i=1;i<=m;++i){
b[i]=read();
lastb[i]=i-last[b[i]];
last[b[i]]=i;
}
for(int i=2,j=0;i<=m;++i){
while(lastb[j+1]!=min(j+1,lastb[i])&&j) j=f[j];
if(min(j+1,lastb[i])==lastb[j+1]) j++;
f[i]=j;
}
for(int i=1,j=0;i<=n;++i){
while((lastb[j+1]!=min(j+1,lasta[i])||j==m)&&j) j=f[j];
if(min(j+1,lasta[i])==lastb[j+1]) j++;
if(j==m) ans[++cnt]=i-m+1;
}
printf("%d\n",cnt);
for(int i=1;i<=cnt;++i) printf("%d ",ans[i]);
cout<<endl;
}
return 0;
}
当然,上述条件,也可以用Hash写。
60分暴力美滋滋。
标签:不能 注意 def 插入 ++ 映射 stdout type oss
原文地址:https://www.cnblogs.com/kgxw0430/p/10559456.html