给定一个由 n 位数字组成的序列 a1a2…an.
其中,每个数字都是 0?9之一。
请你判断,能否将数列从中间截断为两个或更多个非空部分,要求每一部分的各位数字之和都相等。
例如,350178 可以截断为 3 个部分 350、17、8,并且满足 3+5+0=1+7=8。
输入格式
第一行包含一个整数 n。
第二行包含 n个数字 a1,a2,…,an,数字之间不含空格。
输出格式
如果可以按要求截断数列,则输出 YES
,否则输出 NO
。
数据范围
前 6个测试点满足 2≤n≤10。
所有测试点满足 2≤n≤100,0≤ai≤9。
直接枚举
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+100;
typedef pair<int,int> PII;
#define x first
#define y second
#define INF 0x3f3f3f3f
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
const int mod=1e9+7;
int n,m;
int a[N];
int sum;
int main()
{string st;cin>>n;cin>>st;for(int i=0;i<n;i++){ a[i]=st[i]-'0';sum+=a[i];}for(int i=2;i<=n;i++) //枚举分成的段数{if(sum%i==0) //如果能整除才能继续判断{int f=sum/i,flag=1;for(int j=0,s=0;j<n;j++){s+=a[j];if(s>f) // 如果超过f 则之后只会越来越大,则不合法{flag=0;break;}else if(s==f) //初始为0s=0;}if(flag){cout<<"YES"<<endl;return 0;}}}cout<<"NO"<<endl;return 0;
}