简单题。直接考虑原来的某个位置的元素最后到了哪里…. O(nm)
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=10005,maxm=305;
int n,m,L[maxm],R[maxm],rd[maxm];
char s[maxn],res[maxn];
int main(){
freopen("cf598B.in","r",stdin);
freopen("cf598B.out","w",stdout);
scanf("%s",s+1); n=strlen(s+1);
scanf("%d",&m);
for(int i=1;i<=m;i++) scanf("%d%d%d",&L[i],&R[i],&rd[i]), rd[i]%=R[i]-L[i]+1;
for(int i=1,now;i<=n;i++){
now=i;
for(int j=1;j<=m;j++) if(L[j]<=now&&now<=R[j]) now=L[j]+(now-L[j]+rd[j])%(R[j]-L[j]+1);
res[now]=s[i];
}
for(int i=1;i<=n;i++) putchar(res[i]);
return 0;
}