Codeforces Round #609 (Div. 2) C Long Beautiful Integer 思维

题目大意:

给一个字符串s,要求你构造一个字符串t,使得t>=s, 并且.

题目思路:

构造的字符串可以看成,前k个字符循环构造而成。

所以对前k个组成的数字进行+1即可,特判进位0。

或者前k个数字不变,判断一下即可。

很明显..思维题,AC:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll INF=1000000000000005;
const int maxn=1e6+5;
ll n,m,p;
char  s[maxn],t[maxn];
int main()
{
    scanf("%lld%lld",&n,&m);
    scanf("%s",s+1);
    for(int i=1;i<=m;i++)
        t[i]=s[i];
    for(int i=1;i<=m;i++)
        for(int k=i+m;k<=n;k+=m) t[k]=t[i];
    if(strcmp(t+1,s+1)>=0)
    {
        printf("%lld\n%s\n",n,t+1);
        return 0;
    }
    for(int i=m;i>=1;i--)
    {
        if(t[i]!='9')
        {
            t[i]++;
            break;
        }
        else
            t[i]='0';
    }
    for(int i=1;i<=m;i++)
        for(int k=i+m;k<=n;k+=m) t[k]=t[i];
    printf("%lld\n%s\n",n,t+1);
    return 0;
}

 

全部评论

相关推荐

点赞 评论 收藏
分享
10-07 23:57
已编辑
电子科技大学 Java
八街九陌:博士?客户端?开发?啊?
点赞 评论 收藏
分享
手撕没做出来是不是一定挂
Chrispp3:不会,写出来也不一定过
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务