美文网首页
区域赛增补名额赛第D题

区域赛增补名额赛第D题

作者: 谈的还原性 | 来源:发表于2018-09-29 19:07 被阅读0次

    题目大意

    题目链接
    给你一个数,看是否能够把这个数拆分成多份,使得每份的和都相等。


    分析

    首先读题就要仔细,题目说的是拆分,所以肯定不能改变各数之间的相对位置。其次就是题目中没有说到底是拆分成多少份。再仔细读一遍题目就会发现这个整数最多是100位,每位最大是9。所以每份的和最大就是999(相对较小)。所以我可以从1到999去枚举每种可能的和。所以对于每一种可能,再从头到尾的遍历字符串,求字符串的和cns,只要等于cns等于枚举的和,那么就让cns=0,如果最后cns等于0,那么枚举的这个值就满足条件。


    代码

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int main(int argc, char const *argv[])
    {
        string s;
        int n;
        scanf("%d",&n);
        cin>>s;
        int len=s.size();
        bool cmp=false;
        for (int i = 1; i <1000; ++i)
        {
            int cns=0;
            int flag=0;
            int cnt=0;
            for(int j=0;j<len;j++)
            {
                cns=cns+s[j]-48;
                if(cns>i)
                {
                    flag=1;
                    break;
                }
                else if(cns==i)
                {
                    cnt++;
                    cns=0;
                }
            }
            if(cns==0&&flag==0&&cnt>1)
            {
                cmp=true;
                break;
            }
        }
        if(cmp)
            printf("Yes\n");
        else
            printf("No\n");
        return 0;
    }
    
    

    总结
    仔细读题。

    相关文章

      网友评论

          本文标题:区域赛增补名额赛第D题

          本文链接:https://www.haomeiwen.com/subject/zymboftx.html