0
点赞
收藏
分享

微信扫一扫

Mike and distribution CodeForces - 798

老罗话编程 2022-08-22 阅读 80


​​Mike and distribution CodeForces - 798​​​
思路:自己的思路停止在给A排序,然后怎么处理B呢。后来看到,只要留下B的两个之间最大的一个就能得出答案。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1e5+10;
struct node
{
int x;int id;
bool operator <(const node &u)const{
return x>u.x;
}
}a[N];
int b[N],ans[N];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int len=n/2+1;
for(int i=0;i<n;i++) scanf("%d",&a[i].x),a[i].id=i+1;//sa+=a[i].x;
for(int i=1;i<=n;i++) scanf("%d",&b[i]);//sb+=b[i];
sort(a,a+n);
int tot=0;
ans[tot++]=a[0].id;
for(int i=1;i<n;i+=2)
{
if(b[a[i].id]>b[a[i+1].id]) ans[tot++]=a[i].id;
else ans[tot++]=a[i+1].id;
//cout<<i<<" "<<b[a[i].id]<<" "<<b[a[i+1].id]<<endl;
}
sort(ans,ans+tot);
cout<<len<<endl;
for(int i=0;i<tot;i++)
i==0?printf("%d",ans[i]):printf(" %d",ans[i]);
printf("\n");
}
return 0;
}


举报

相关推荐

0 条评论