区域赛增补名额赛第D题

2018-09-29  本文已影响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;
}

总结
仔细读题。

上一篇下一篇

猜你喜欢

热点阅读