牡丹江2014网络赛 E zoj—3813 规律与线段树

#include<iostream>
#include<cstring>
using namespace std;
string inp,str;
long long num,a,b,C;
const long long MAXN =  1E9+7;
void adapt()
{
    str=inp;
    b-=a-a%str.size();
    a%=str.size();
    string tem=str.substr(a-1,str.size()-a+1);
    tem+=str.substr(0,a-1);
    str=tem;
    b-=a;
    a=0;
    b++,a++;
    str+=str;
}
int main()
{
    std::ios::sync_with_stdio(false);
    int kase;
    cin>>kase;
    while(kase--)
    {
        cin>>inp>>num;
        while(num--)
        {
            cin>>C>>a>>b;
            if(2==C)
            {
                adapt();
                long long  times=b/str.size(),mods=b%str.size();
                unsigned long long ans=0;
                string tail=str.substr(0,mods);
                long long  t_size=tail.size();
                for(long long  m=t_size;m>0;m-=2)
                    ans+=(tail[t_size-m]-48)*m;
                for(long long i=0;i<str.size();i+=2)
                    ans=(ans+((str[i]-48)*(b+t_size+str.size()-2*i)/2*times)%MAXN)%MAXN;
                cout<<ans<<endl;
            }
            else
                inp[a-1]=b+48;
        }
    }
    return 0;
}

很是伤心啊,推了半天规律,re了;

能通过样例如有好心人,帮忙看看吧

http://www.cnblogs.com/gj-Acit/p/3961971.html

你可能感兴趣的:(牡丹江2014网络赛 E zoj—3813 规律与线段树)