题目大意
给定两个序列a,b,要求找到不多于个下标,使得对于a,b这些下标所对应数的2倍大于所有数之和。
N<=100000,所有输入大于0,保证有解。
因为明确的暗示,所以一定找个。
考虑去掉取整符号,分奇偶讨论。
1 n为奇数
将a从大到小排序,首先取最大的,接着每两个数取其中b较大的。
2 n为偶数
将a从大到小排序,首先取最大的和另一个(都可以),接着每两个数取其中b较大的。
1 #include<algorithm> 2 #include<iostream> 3 #include<cstdio> 4 using namespace std; 5 const int N=100005; 6 int n; 7 struct node 8 { 9 int a,b,pos; 10 }t[N]; 11 bool cmp(node c,node d) 12 { 13 return c.a>d.a; 14 } 15 int main() 16 { 17 scanf("%d",&n); 18 for(int i=1;i<=n;i++) 19 scanf("%d",&t[i].a); 20 for(int i=1;i<=n;i++) 21 scanf("%d",&t[i].b); 22 for(int i=1;i<=n;i++) 23 t[i].pos=i; 24 sort(t+1,t+n+1,cmp); 25 printf("%d\n",n/2+1); 26 printf("%d ",t[1].pos); 27 if(n%2==0) 28 { 29 printf("%d ",t[n].pos); 30 n--; 31 } 32 for(int i=2;i<=n;i+=2) 33 if(t[i].b>t[i+1].b) 34 printf("%d ",t[i].pos); 35 else 36 printf("%d ",t[i+1].pos); 37 printf("\n"); 38 return 0; 39 }