题目链接:http://codeforces.com/contest/1059/problem/C
思路:构造一个前缀和数组,通过遍历选取开头a[i],如果数列可被分成数个a[i],则满足题意
c++代码:
#include <iostream>
using namespace std;
const int maxn=105;
int a[maxn];
int main() {
int n;
cin >> n;
a[0]=0;
getchar();
for(int i=1;i<=n;i++) {
char t;
cin >> t;
t-='0';
a[i]=t+a[i-1];
}
bool flag=0;
if(a[n]>0)
for(int i=1;i<n;i++) {
if(!a[i]||a[n]%a[i])continue;
int tmp=a[i];
int cnt=1;
for(int j=i+1;j<=n;j++) {
// cout << a[j] << endl;
if(a[j]%tmp)continue;
else if(a[j]%tmp==0&&a[j]-a[j-1]){
cnt++;
}
}
if(cnt*tmp==a[n]&&cnt>1){
flag=1;
//cout << cnt <<" "<<tmp<<" "<<a[n]<<endl;
break;
}
}
else flag=1;
if(flag)cout <<"YES"<<endl;
else cout <<"NO"<<endl;
return 0;
}