1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| #include<bits/stdc++.h> #define ll long long #define ull unsigned long long #define maxn #define put() putchar('\n') #define Tp template<typename Ty> #define Ts template<typename Ty,typename... Ar> using namespace std; inline void read(int &x){ int f=1;x=0;char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();} while (c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();} x*=f; } namespace Debug{ Tp void _debug(char* f,Ty t){cerr<<f<<'='<<t<<endl;} Ts void _debug(char* f,Ty x,Ar... y){while(*f!=',') cerr<<*f++;cerr<<'='<<x<<",";_debug(f+1,y...);} Tp ostream& operator<<(ostream& os,vector<Ty>& V){os<<"[";for(auto& vv:V) os<<vv<<",";os<<"]";return os;} #define gdb(...) _debug((char*)#__VA_ARGS__,__VA_ARGS__) }using namespace Debug; bitset<1000005>B[10],tmp,cl; char s[1000005]; signed main(void){ int T,op,l,r,i,len; read(T); while (T--) { read(op);read(l); if (op==0) { scanf("%s",s);for (len=0;s[len];len++) ; for (i=0;i<10;i++) { tmp=((B[i]>>l)<<l),B[i]=(tmp<<len)^(tmp^B[i]); } for (i=0;i<len;i++) B[s[i]-'0'][i+l]=1; } else if (op==1){ read(r); for (i=0;i<10;i++) { tmp=(B[i]>>r)<<r; B[i]=(B[i]^((B[i]>>l)<<l))^(tmp>>(r-l)); } } else if (op==2) { read(r);scanf("%s",s);for (len=0;s[len];len++) ; if (r-l<len) {puts("0");continue;} tmp=(((~cl)>>l)<<l)^(((~cl)>>(r-len+1))<<(r-len+1)); for (i=0;i<len;i++) { tmp=tmp&B[s[i]-'0']; tmp<<=1; } printf("%d\n",(int)tmp.count()); } } return 0; }
|