2 3 1 4 5 6 1 2 3 5 2 3 4 7 8 9 3 4 5 2 3
YES NO
/************************************************************************/
附上该题对应的中文题
Soda和Beta是好朋友. 今天他们准备要玩一个游戏. Soda有n张牌, 牌面上数字分别为a1,a2,...,an. Beta也有n张牌, 牌面上数字分别为b1,b2,...,bn. 一开始, 他们选择了一个小于等于n的数字m. 然后他们分别从自己的n张牌中随机选择了m张卡. m张卡的和大的那个人赢. Soda想要知道他是否能够必赢, 无论选出来的m张牌是什么.
输入有多组数据. 第一行有一个整数T, 表示测试数据组数. 然后对于每组数据: 第一行有两个整数 n 和 m (1≤m≤n≤500). 第2行有n个整数a1,a2,...,an (1≤ai≤1000)表示Soda的牌. 第3行有n个整数b1,b2,...,bn (1≤bi≤1000)表示Beta的牌.
对于每组数据, 如果Soda必赢输出"YES", 否则输出"NO".
2 3 1 4 5 6 1 2 3 5 2 3 4 7 8 9 3 4 5 2 3
YES NO
出题人的解题思路:
由于都是随机出牌, Soda要必胜显然是他的最小的m张牌的和要大于Beta最大的m张牌的和.
因为是随机出牌,为了使Soda随机抽取的m张牌之和一定比Beta随机抽取的m张牌之和大,那么要保证Soda拥有的n张牌中最小的m张牌之和需要大于Beta拥有的n张牌中最大的m张牌#pragma comment(linker, "/STACK:1024000000,1024000000") #include<stdio.h> #include<string.h> #include<stdlib.h> #include<queue> #include<stack> #include<math.h> #include<vector> #include<map> #include<set> #include<stdlib.h> #include<cmath> #include<string> #include<algorithm> #include<iostream> #define exp 1e-10 using namespace std; const int N = 505; const int inf = 1000000000; const int mod = 2009; int a[N],b[N]; int main() { int t,i,n,m,sum1,sum2; scanf("%d",&t); while(t--) { sum1=sum2=0; scanf("%d%d",&n,&m); for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<n;i++) scanf("%d",&b[i]); sort(a,a+n); sort(b,b+n); for(i=0;i<m;i++) sum1+=a[i]; for(i=0;i<m;i++) sum2+=b[n-1-i]; if(sum1>sum2) puts("YES"); else puts("NO"); } return 0; }菜鸟成长记