这个做法不会证,但是可以作为以后做不出题的思路,万一A了呢
random_shuffle 头文件algorithm,用来对一个元素序列进行随机的重新排序。
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=100005;
int a[N],b[N],c[N];
int main() {
///
int n;scanf("%d",&n);
///init
for(int i=1;i<=n;++i) c[i]=i;
///read
for(int i=1;i<=n;++i) scanf("%d",a+i);
for(int i=1;i<=n;++i) scanf("%d",b+i);
///get s
ll sa=0,sb=0;
for(int i=1;i<=n;++i) {
sa=sa+a[i];
sb=sb+b[i];
}
///solve
int k=n/2+1;
while(1) {
ll nowa=0,nowb=0;
for(int i=1;i<=k;++i) {
nowa=nowa+a[c[i]];
nowb=nowb+b[c[i]];
}
if(nowa*2>sa&&nowb*2>sb) {
printf("%d\n",k);
for(int i=1;i<=k;++i) printf("%d ",c[i]);
puts("");
break;
}
random_shuffle(c+1,c+1+n);
}
return 0;
}