题意:
给你两个序列 从中选出n/2+1个相同下标的数 使得两个序列的和 大于各自序列和的一半 题目保证有解
解析:
如果n是奇数 ,就先把第一个选进去 然后两个两个的for 对于相邻的两个 选取B大的那个,然后就能保证a的和大于序列和的一半
因为a1>max(a2,a3) min(a2,a3)>max(a4,a5)…
b选的也是大的 所以也能保证
偶数的话把第二个也放进去就可以了
代码:
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
pair<int , pair<int,int> >e[100009];
int n;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
int mid;scanf("%d",&mid);
e[i].first=mid;
}
for(int i=1;i<=n;i++){
int mid;scanf("%d",&mid);
e[i].second=make_pair(mid,i);
}
printf("%d\n",n/2+1);
sort(e+1,e+1+n);
int ar;
if(n%2==1)printf("%d ",e[n].second.second),ar=n-1;
else printf("%d %d ",e[n].second.second,e[n-1].second.second),ar=n-2;
for(;ar>0;ar-=2){
if(e[ar].second.first>e[ar-1].second.first)printf("%d ",e[ar].second.second);
else printf("%d ",e[ar-1].second.second);
}
printf("\n");
}