zoukankan      html  css  js  c++  java
  • Codeforces Round #607 (Div. 2) C. Cut and Paste

    题目链接:https://codeforces.com/contest/1281/problem/C

    题目很长而且还看不懂:)

    照着样例推结论把:)

    t个样例,每个样例给个x,再给个字符串s。

    表示i从1到x,每次将k个相同的字符串str,加到s末尾,k=s[i]-'0',str为s[i+1]到末尾的字符串。

    问执行x次后的字符串长度,需取mod。

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e6+10;
    const int mod=1e9+7; 
    char s[maxn];
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            int x;
            scanf("%d%s",&x,s+1);
            int n=strlen(s+1);
            for(int i=1,j=n;j<=x;i++)//需要复制s[i+1]到s[j],复制s[i]遍 
            {
                bool flag=false;
                for(int r=1;r<s[i]-'0';r++)//需要重复r次 
                {
                    for(int t=i+1;t<=j;t++)
                    {
                        if(t+(j-i)*r>x)//只需要记录到s[x] 
                        {
                            flag=true;
                            break;
                        }
                        s[t+(j-i)*r]=s[t];
                    }
                }
                if(flag)break;
                j=(j-i)*(s[i]-'0')+i;//更新j 
            }
            //模拟出所有s[i] 
            long long len=n;
            for(int i=1;i<=x;i++)
            {
                len--;
                len=len*(s[i]-'0')%mod;//比记录所有len要巧妙 
            }
            printf("%lld
    ",((len+x)%mod+mod)%mod);
        }
        return 0;
    } 
  • 相关阅读:
    QR code 乱谈(一)
    用JAVA实现数字水印(可见)
    ctf总结
    Unix/Linux常用命令
    C语言概述
    C语言发发展历史
    为什么要学习C语言
    计算机应用领域
    计算机发展趋势
    如何学习计算机
  • 原文地址:https://www.cnblogs.com/myrtle/p/12074899.html
Copyright © 2011-2022 走看看