1761 - 最小差距 X (无数据)
时间限制 : 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; }