绍兴中学6.26模拟赛

发布时间 2023-06-26 20:05:24作者: alloverzyt

没有爆零,足矣。

image
发现绍兴一中机房的一个特点:键盘打得贼响!!

T1 ctrl

(中文名我都不好意思大打)
第一遍测T1一分都没得啊!
这跟题目描述自相矛盾有关,导致我只是轻微考虑了一下 \(a[i]\) 为负的情况。
但是没有考虑的是 \(p[i]\) 竟然也可以为零

仁者见仁,智者见智吧

#include<bits/stdc++.h>
using namespace std;
#define N 800000
int n,m,p[N],a[N],b[N],fa[N],fb[N];
long long suma=0,sumb=0;
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	for(int i=1;i<=n;i++) scanf("%d",&p[i]);
	for(int i=1;i<=n;i++){
		scanf("%d",&b[i]);
		if(b[i]==1&&a[i]>=0) suma+=a[i];
		if(b[i]==0&&a[i]>=0) sumb+=a[i]; 
	}
	for(int i=1;i<=n;i++){
		if(b[i]==1){
			if(a[i]<0) fa[i]=-p[i];
			else fa[i]=-a[i]-p[i];
		}
		else{
			if(a[i]<0) fa[i]=-p[i];
			else fa[i]=a[i]-p[i];
		}
		if(b[i]==0){
			if(a[i]<0) fb[i]=-p[i];
			else fb[i]=-a[i]-p[i];
		}
		else{
			if(a[i]<0) fb[i]=-p[i];
			else fb[i]=a[i]-p[i];
		}
	}
	sort(fa+1,fa+1+n);
	sort(fb+1,fb+1+n);
	int ma=m,mb=m;
	for(int i=n;i>=1;i--){
		if(fa[i]>0&&ma>0) suma+=fa[i],ma--;
		if(fb[i]>0&&mb>0) sumb+=fb[i],mb--;
	}
	printf("%lld",max(suma,sumb));
	return 0;
}