CF - 754A.Lesha and array splitting - 贪心+思维
2017-03-03 21:16
411 查看
1.题目描述:
A. Lesha and array splitting
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
One spring day on his way to university Lesha found an array A. Lesha likes to split arrays into several parts. This time Lesha decided
to split the array A into several, possibly one, new arrays so that the sum of elements in each of the new arrays is not zero. One
more condition is that if we place the new arrays one after another they will form the old array A.
Lesha is tired now so he asked you to split the array. Help Lesha!
Input
The first line contains single integer n (1 ≤ n ≤ 100) —
the number of elements in the array A.
The next line contains n integers a1, a2, ..., an ( - 103 ≤ ai ≤ 103) —
the elements of the array A.
Output
If it is not possible to split the array A and satisfy all the constraints, print single line containing "NO"
(without quotes).
Otherwise in the first line print "YES" (without quotes). In the next line print single integer k —
the number of new arrays. In each of the next k lines print two integers li and ri which
denote the subarray A[li... ri] of
the initial array A being the i-th
new array. Integers li, ri should
satisfy the following conditions:
l1 = 1
rk = n
ri + 1 = li + 1 for
each 1 ≤ i < k.
If there are multiple answers, print any of them.
Examples
input
output
input
output
input
output
input
output
2.题意概述:
给你一个数组,问是否能找到元素和不为 0 的子数组。
3.解题思路:
只要原数组不全为 0 就肯定 YES 啊,然后不为 0 的元素自己就是一个(只存在一个元素)数组,碰到 0 的元素,就跟下一个不为的 0 的元素合一块作为一个数组就行了。
有些题其实想明白核心代码就几行orz
4.AC代码:
#include <stdio.h>
#define N 101
using namespace std;
int a
;
int main()
{
int n;
while (scanf("%d", &n) != EOF)
{
int flag = 0, sum = 0;
for (int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
sum += a[i];
if (a[i] != 0 && flag == 0)
flag = i;
}
if (flag == 0)
{
puts("NO");
continue;
}
puts("YES");
if (sum == 0)
printf("2\n%d %d\n%d %d\n", 1, flag, flag + 1, n);
else
printf("1\n%d %d\n", 1, n);
}
return 0;
}
A. Lesha and array splitting
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
One spring day on his way to university Lesha found an array A. Lesha likes to split arrays into several parts. This time Lesha decided
to split the array A into several, possibly one, new arrays so that the sum of elements in each of the new arrays is not zero. One
more condition is that if we place the new arrays one after another they will form the old array A.
Lesha is tired now so he asked you to split the array. Help Lesha!
Input
The first line contains single integer n (1 ≤ n ≤ 100) —
the number of elements in the array A.
The next line contains n integers a1, a2, ..., an ( - 103 ≤ ai ≤ 103) —
the elements of the array A.
Output
If it is not possible to split the array A and satisfy all the constraints, print single line containing "NO"
(without quotes).
Otherwise in the first line print "YES" (without quotes). In the next line print single integer k —
the number of new arrays. In each of the next k lines print two integers li and ri which
denote the subarray A[li... ri] of
the initial array A being the i-th
new array. Integers li, ri should
satisfy the following conditions:
l1 = 1
rk = n
ri + 1 = li + 1 for
each 1 ≤ i < k.
If there are multiple answers, print any of them.
Examples
input
3 1 2 -3
output
YES 2 1 2 3 3
input
8 9 -12 3 4 -4 -10 7 3
output
YES 2 1 2 3 8
input
1 0
output
NO
input
4 1 2 3 -5
output
YES 4 1 1 2 2 3 3 4 4
2.题意概述:
给你一个数组,问是否能找到元素和不为 0 的子数组。
3.解题思路:
只要原数组不全为 0 就肯定 YES 啊,然后不为 0 的元素自己就是一个(只存在一个元素)数组,碰到 0 的元素,就跟下一个不为的 0 的元素合一块作为一个数组就行了。
有些题其实想明白核心代码就几行orz
4.AC代码:
#include <stdio.h>
#define N 101
using namespace std;
int a
;
int main()
{
int n;
while (scanf("%d", &n) != EOF)
{
int flag = 0, sum = 0;
for (int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
sum += a[i];
if (a[i] != 0 && flag == 0)
flag = i;
}
if (flag == 0)
{
puts("NO");
continue;
}
puts("YES");
if (sum == 0)
printf("2\n%d %d\n%d %d\n", 1, flag, flag + 1, n);
else
printf("1\n%d %d\n", 1, n);
}
return 0;
}
相关文章推荐
- CF - 797A. k-Factorization - 思维+贪心+数学
- CF - 779A. Pupils Redistribution 贪心+思维
- (CF 792E Colored Balls) 思维题 贪心
- CF - 803A. Maximal Binary Matrix - 思维+贪心
- CF - 782D. Innokenty and a Football League - 模拟+思维+贪心+dfs插入
- CF - 805C. Find Amir - 贪心思维+构造
- CF 782D. Innokenty and a Football League 贪心,思维,模拟
- CF - 368B. Sereja and Suffixes - 哈希+思维
- 湘潭邀请赛G- Parentheses(贪心,思维)
- 利用贪心的思维对算法剪枝(POJ 2376)
- CF 332 C 贪心
- CF_604B(二分+贪心)
- CF 155C. Hometask 思维+模拟.
- CF 496C(Removing Columns-贪心取字典序)
- CF - 752B. Santa Claus and Keyboard Check 贪心+字符串
- CF - 757B. Bash's Big Day - 贪心+暴力
- CodeForces - 798C Mike and gcd problem (贪心+思维)
- CFcontest377-D 贪心,二分
- CF 135 DIV2 B Special Offer! Super Price 999 Bourles! 思维
- Wine trading in Gergovia UVA - 11054 贪心思维