C. Vasya and Golden Ticket
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Recently Vasya found a golden ticket — a sequence which consists of nn digits a1a2…ana1a2…an. Vasya considers a ticket to be lucky if it can be divided into two or more non-intersecting segments with equal sums. For example, ticket 350178350178 is lucky since it can be divided into three segments 350350, 1717 and 88: 3+5+0=1+7=83+5+0=1+7=8. Note that each digit of sequence should belong to exactly one segment.
Help Vasya! Tell him if the golden ticket he found is lucky or not.
Input
The first line contains one integer nn (2≤n≤1002≤n≤100) — the number of digits in the ticket.
The second line contains nn digits a1a2…ana1a2…an (0≤ai≤90≤ai≤9) — the golden ticket. Digits are printed without spaces.
Output
If the golden ticket is lucky then print "YES", otherwise print "NO" (both case insensitive).
Examples
input
Copy
5 73452
output
Copy
YES
input
Copy
4 1248
output
Copy
NO
Note
In the first example the ticket can be divided into 77, 3434 and 5252: 7=3+4=5+27=3+4=5+2.
In the second example it is impossible to divide ticket into segments with equal sum.
題意:
給定長度為n的數字字串,要求要求劃分成連續的不想交的多個字串,然後每個字元當做加法運算中的元素,
問是否可以達到上述要求
思路:
n最大100,所以最大的加和不會超過 9*n
所以我們列舉這個“和” num,然後暴力掃這個串,然後看是否可以形成大於等於2段的數字和為num
#include <bits/stdc++.h>
using namespace std;
const int maxn = 100 + 7;
int n;
char s[maxn];
bool is_ok(int num)
{
int cnt = 0, sum = 0;
for(int i = 1; i <= n; ++i)
{
sum += (s[i] - '0');
if(sum == num)
{
sum = 0;
cnt ++ ;
}
else if(sum > num)
{
return false;
}
}
if(sum != 0)
{
return false;
}
if(cnt >= 2)
{
return true;
}
else
{
return false;
}
}
int main()
{
scanf("%d", &n);
scanf("%s", s+1);
int m = n * 9;
for(int i = 0; i <= m; ++i)
{
if(is_ok(i))
{
puts("YES");
return 0;
}
}
puts("NO");
return 0;
}