1761 - 最小差距 X (无数据)

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

最小差距
【题目描述】 给定一些不同的一位数字,你可以从这些数字中选择若干个,并将它们按一定顺序排列,组成一个整数,把剩下的数字按一定顺序排列,组成另一个整数。组成的整数不能以0开头(除非这个整数只有1位)。
例如,给定6个数字,0,1,2,4,6,7,你可以用它们组成一对数10和2467,当然,还可以组成其他的很多对数,比如210和764,204和176。这些对数中两个数差的绝对值最小的是204和176,为28。
给定N个不同的0~9之间的数字,请你求出用这些数字组成的每对数中,差的绝对值最小的一对(或多对)数的绝对值是多少?

【输入】 输入第一行包括一个数T(T≤1000),为测试数据的组数。
  每组数据包括两行,第一行为一个数N(2≤N≤10),表示数字的个数。下面一行为N个不同的一位数字。

【输出】输出T行,每行一个数,表示第i个数据的答案。即最小的差的绝对值

【样例输入】
2
6
0 1 2 4 6 7
4
1 6 3 4

【样例输出】
28
5

题目输入

题目输出

输入/输出样例

输入格式


                        

输出格式


                        

C++解答

#include<cstdio>
#include<algorithm>
using namespace std;
struct p
{
	int num;
	int pr;
}a[1005];
int comp(const p &a,const p &b)
{
	if(a.pr<b.pr)return 1;
	else return 0;
}
int main()
{
	int m,n;
	scanf("%d%d",&m,&n);
	for(int i=1;i<=n;++i)
	 scanf("%d%d",&a[i].pr,&a[i].num);
	sort(a+1,a+n+1,comp);
	int i=0,ans=0;
	while(m>0)
	{
		++i;
		if(m>=a[i].num)
		{
			ans+=a[i].num*a[i].pr;
			m-=a[i].num;
			continue;
		}
		if(m<=a[i].num)
		{
			ans+=m*a[i].pr;
			m=0;
			continue;
		}
	}
	printf("%d",ans);
	return 0;
}