Codeforces Round #512 (Div. 2, based on Technocup 2019 Elimination Round 1) C. Vasya and Golden Tick...

任意门:http://codeforces.com/contest/1058/problem/C

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 a1a2ana1a2…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 (2n1002≤n≤100) — the number of digits in the ticket.

The second line contains nn digits a1a2ana1a2…an (0ai90≤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的数字,判断是否能分成相同和的若干块。

解题思路:

记一道被自己蠢哭的水题,主要是理解题意的问题;

一开始以为分块可以不连续,又是排序又乱七八糟搞一大堆;

结果分块是连续的,活生生的贪心水题。

读题很重要。

 

AC code:

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <algorithm>
 4 #include <cstring>
 5 #include <cmath>
 6 using namespace std;
 7 const int MAXN = 102;
 8 char str[MAXN];
 9 int N, sum;
10 int main()
11 {
12     scanf("%d", &N);
13     scanf("%s", &str);
14     bool flag = true;
15     for(int i = 0; i < N-1; i++){
16         sum += str[i]-'0';
17         int pos = i+1;
18         flag = true;
19         while(pos < N){
20             int sum2 = str[pos++]-'0';
21             while(pos < N && sum2+str[pos]-'0' <= sum){
22                 sum2+=str[pos++]-'0';
23             }
24             if(sum2 != sum) {flag = false; break;}
25         }
26         if(flag) {puts("YES"); break;}
27     }
28     if(flag == false) puts("NO");
29     return 0;
30 }
View Code

 

转载于:https://www.cnblogs.com/ymzjj/p/9703103.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值