第二个点就WA了?
  • 板块CF3B Lorry
  • 楼主diqiuyi奶龙
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/2/28 20:01
  • 上次更新2023/10/28 07:31:08
查看原帖
第二个点就WA了?
324666
diqiuyi奶龙楼主2022/2/28 20:01
#include <bits/stdc++.h>
using namespace std;
#define int long long
inline int read(int x=0,bool f=1){
	char c=getchar();
	while(c>'9'||c<'0'){if(c=='-')f=0;c=getchar();}
	while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+c-'0';c=getchar();}
	return f?x:-x;
}
int n,v,a,b,n1,n2,ans,sum1[100005],sum2[100005],p1,p2;
struct node{
	int id,val;
}v1[100005],v2[100005];
bool cmp(const node &x,const node &y){
	return x.val>y.val;
}
main(){
	n=read(),v=min(read(),200001ll);
	for(int i=1;i<=n;i++){
		a=read(),b=read();
		a==2?v2[++n2].val=b,v2[n2].id=i
		:v1[++n1].val=b,v1[n1].id=i;
	}
	sort(v1+1,v1+n1+1,cmp),sort(v2+1,v2+n2+1,cmp);
	for(int i=1;i<=n1;i++)
		sum1[i]=sum1[i-1]+v1[i].val;
	for(int i=1;i<=n2;i++)
		sum2[i]=sum2[i-1]+v2[i].val;	
	for(int i=0;i<=min(n1,v);i++)
		if(ans<sum1[i]+sum2[min(n2,(v-i)>>1)])
			ans=sum1[i]+sum2[min(n2,(v-i)>>1)],p1=i,p2=min(n2,(v-i)>>1);
	printf("%lld\n",ans);
	for(int i=1;i<=p1;i++)
		printf("%lld ",v1[i].id);
	for(int i=1;i<=p2;i++)
		printf("%lld ",v2[i].id);
	putchar(10);
	return 0;
}

2022/2/28 20:01
加载中...