codefroces-246

题目链接:点击打开链接

A. Buggy Sorting
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Little boy Valera studies an algorithm of sorting an integer array. After studying the theory, he went on to the practical tasks. As a result, he wrote a program that sorts an array of n integers a1, a2, ..., an in the non-decreasing order. The pseudocode of the program, written by Valera, is given below. The input of the program gets number n and array a.

loop integer variable i from 1 to n - 1
    loop integer variable j from i to n - 1
        if (aj > aj + 1), then swap the values of elements aj and aj + 1

But Valera could have made a mistake, because he hasn't yet fully learned the sorting algorithm. If Valera made a mistake in his program, you need to give a counter-example that makes his program work improperly (that is, the example that makes the program sort the array not in the non-decreasing order). If such example for the given value of n doesn't exist, print -1.

Input

You've got a single integer n (1 ≤ n ≤ 50) — the size of the sorted array.

Output

Print n space-separated integers a1, a2, ..., an (1 ≤ ai ≤ 100) — the counter-example, for which Valera's algorithm won't work correctly. If the counter-example that meets the described conditions is impossible to give, print -1.

If there are several counter-examples, consisting of n numbers, you are allowed to print any of them.

Examples
input
1
output
-1
题意:给出一种排序方式,问能不能使一组数据,排序后成为非递减序列,给出数组长度,如果不行,输出使程序不成立的一组数据。
思路:模拟一下可以得到,当n为1,2时才能正确排序

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n,a[1000];
int main()
{
	while(~scanf("%d",&n))
	{
		if(n==1||n==2)
		{
			puts("-1");
			continue;
		}
		for(int i=n;i>0;i--)
		{
			printf(i==1?"%d\n":"%d ",i);
		}
	}
	return 0;
}

题目链接:点击打开链接

B. Increase and Decrease
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Polycarpus has an array, consisting of n integers a1, a2, ..., an. Polycarpus likes it when numbers in an array match. That's why he wants the array to have as many equal numbers as possible. For that Polycarpus performs the following operation multiple times:

  • he chooses two elements of the array aiaj (i ≠ j);
  • he simultaneously increases number ai by 1 and decreases number aj by 1, that is, executes ai = ai + 1 and aj = aj - 1.

The given operation changes exactly two distinct array elements. Polycarpus can apply the described operation an infinite number of times.

Now he wants to know what maximum number of equal array elements he can get if he performs an arbitrary number of such operation. Help Polycarpus.

Input

The first line contains integer n (1 ≤ n ≤ 105) — the array size. The second line contains space-separated integers a1, a2, ..., an(|ai| ≤ 104) — the original array.

Output

Print a single integer — the maximum number of equal array elements he can get if he performs an arbitrary number of the given operation.

Examples
input
2
2 1
output
1
input
3
1 4 1
output
3

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n;
int main()
{
	while(~scanf("%d",&n))
	{
		int ans=0;
		for(int i=0;i<n;i++)
		{
			int x;
			scanf("%d",&x);
			ans+=x;
		}
		if(ans%n==0)
			printf("%d\n",n);
		else
			printf("%d\n",n-1);
	}
	return 0;
}

题目链接:点击打开链接

C. Beauty Pageant
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

General Payne has a battalion of n soldiers. The soldiers' beauty contest is coming up, it will last for k days. Payne decided that his battalion will participate in the pageant. Now he has choose the participants.

All soldiers in the battalion have different beauty that is represented by a positive integer. The value ai represents the beauty of the i-th soldier.

On each of k days Generals has to send a detachment of soldiers to the pageant. The beauty of the detachment is the sum of the beauties of the soldiers, who are part of this detachment. Payne wants to surprise the jury of the beauty pageant, so each of k days the beauty of the sent detachment should be unique. In other words, all k beauties of the sent detachments must be distinct numbers.

Help Payne choose k detachments of different beauties for the pageant. Please note that Payne cannot just forget to send soldiers on one day, that is, the detachment of soldiers he sends to the pageant should never be empty.

Input

The first line contains two integers nk (1 ≤ n ≤ 501 ≤ k ≤  ) — the number of soldiers and the number of days in the pageant, correspondingly. The second line contains space-separated integers a1, a2, ..., an (1 ≤ ai ≤ 107) — the beauties of the battalion soldiers.

It is guaranteed that Payne's battalion doesn't have two soldiers with the same beauty.

Output

Print k lines: in the i-th line print the description of the detachment that will participate in the pageant on the i-th day. The description consists of integer ci (1 ≤ ci ≤ n) — the number of soldiers in the detachment on the i-th day of the pageant and ci distinct integersp1, i, p2, i, ..., pci, i — the beauties of the soldiers in the detachment on the i-th day of the pageant. The beauties of the soldiers are allowed to print in any order.

Separate numbers on the lines by spaces. It is guaranteed that there is the solution that meets the problem conditions. If there are multiple solutions, print any of them.

Examples
input
3 3
1 2 3
output
1 1
1 2
2 3 2
input
2 1
7 12
output
1 12 
大意:任取任意个数使得每次的和都不相同,且所有的数都是不同的。输出每次选择元素的个数和方案。

思路:降序排列后,先一一输出,再两两输出........可以保证每次输出的和都不同

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,k;
int a[55];
bool cmp(int x,int y)
{
	return x>y;
}
int main()
{
	while(~scanf("%d%d",&n,&k))
	{
		for(int i=1;i<=n;i++)
			scanf("%d",a+i);
		sort(a+1,a+n+1,cmp);
		int t=1,cnt=1;
		while(t<=k)
		{
			for(int i=cnt;i<=n;i++)
			{
				printf("%d ",cnt);
				for(int j=1;j<cnt;j++)
				{
					printf("%d ",a[j]);
				}
				printf("%d\n",a[i]);
				t++;
				if(t>k)	break;
			}
			cnt++;
		}
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值