1 条题解
-
0
#include <bits/stdc++.h> #define ll long long using namespace std; const int N=205; int n,m,k,s,t,sum[N],R[N],L[N]; char c[N<<1],d[N]; int f[N][20],_f[N][20],log2n; ll g[N][20],_g[N][20]; int main(){ cin>>n>>m; cin>>c+1; for (int i=1;i<=2*n;++i) if (c[i]=='L') ++s; else R[++t]=s; R[n]=n+1;s=t=n+1; for (int i=2*n;i>=1;--i) if (c[i]=='R') --s; else L[--t]=s; L[1]=0;cin>>d+1; for (int i=1;i<=n;++i) sum[i]=sum[i-1]+(d[i]=='1'); for (int i=1;i<=n;++i) { f[i][0]=R[i];_f[i][0]=L[i]; g[i][0]=sum[R[i]]; if (L[i]>=1) _g[i][0]=sum[L[i]-1]; } f[n+1][0]=n+1;g[0][0]=0; log2n=log2(n); for (int j=1;j<=log2n;++j){ for (int i=n+1;i>=1;--i){ f[i][j]=f[f[i][j-1]][j-1]; g[i][j]=g[i][j-1]+g[f[i][j-1]][j-1]; } for (int i=1;i<=n;++i){ _f[i][j]=_f[_f[i][j-1]][j-1]; _g[i][j]=_g[i][j-1]+_g[_f[i][j-1]][j-1]; } } ll ans1,ans2; for (int i=1;i<=m;++i){ cin>>s>>t; ans1=0;ans2=sum[s]-sum[s-1]+sum[t]-sum[t-1]; for (int j=log2n;j>=0;--j){ if (f[s][j]<t){ ans1+=(1<<j); ans2+=g[s][j]; s=f[s][j]; } } cout<<ans1+1<<' '; for (int j=0;ans1;ans1>>=1,++j) if (ans1&1) {ans2-=_g[t][j];t=_f[t][j];} cout<<ans2<<"\n"; } }
- 1
信息
- ID
- 504
- 时间
- 4000ms
- 内存
- 512MiB
- 难度
- 8
- 标签
- 递交数
- 22
- 已通过
- 6
- 上传者