Help
查看原帖
Help
359614
Forever1507楼主2021/11/11 21:57
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k,m,cnt1,cnt2,cnt3,cao,anss;
bool flag[200005];
struct node{
	int t,a,b;
}book[200005],book1[200005],book2[200005];
struct Node{
	int val,opt,a1,a2;
}book3[2000005];
bool cmp(node a,node b){
	return a.t<b.t;
}
bool cm(Node a,Node b){
	return a.val<b.val;
}
map<int,int>mp1,mp2,mp3,mp4,mp5;
signed main(){
	memset(flag,0,sizeof(flag));
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++){
		cin>>book[i].t>>book[i].a>>book[i].b;
		if(book[i].a==1&&book[i].b==0){
			book1[++cnt1]=(node){book[i].t,i,i};
			book3[++cnt3]=(Node){book[i].t,4,i,i};
			mp1[cnt1]=cnt3;
		}
		else if(book[i].a==0&&book[i].b==1){
			book2[++cnt2]=(node){book[i].t,i,i};
			book3[++cnt3]=(Node){book[i].t,4,i,i};
			mp2[cnt2]=cnt3;
		}
		else if(book[i].a==1&&book[i].b==1)anss++,book3[++cnt3]=(Node){book[i].t,1,i,i};
		else book3[++cnt3]=(Node){book[i].t,0,i,i};
	}
	sort(book1+1,book1+1+cnt1,cmp);
	sort(book2+1,book2+1+cnt2,cmp);
	for(int i=1;i<=min(cnt1,cnt2);i++){
		anss++;
		book3[++cnt3]=(Node){book1[i].t+book2[i].t,2,book1[i].a,book2[i].a};
		mp3[cnt3]=mp1[i];
		mp4[cnt3]=mp2[i];
		mp5[mp1[i]]=mp5[mp2[i]]=cnt3;
	}
	//cout<<anss<<'\n';
	if(anss<k){
		puts("-1");
		return 0;
	}
	int limit=m;
	if(k<m)limit=m-2*k;//((k-l)+l*2)>=m
	//FuckCF
	int ans=0,tmp=0,tmp2=0;
	vector<int>vec;
	sort(book3+1,book3+cnt3+1,cm);
	for(int i=1;i<=cnt3;i++){
		if(book3[i].opt==4)continue;
		if(book3[i].opt==2&&tmp2+2<=m&&tmp<=limit){
			ans+=book3[i].val;
			tmp++;
			vec.push_back(book3[i].a1);
			vec.push_back(book3[i].a2);
			tmp2+=2;
			flag[i]=flag[mp3[i]]=flag[mp4[i]]=1;
		}
		if(tmp2>=m||tmp>=k)break;
	}
	for(int i=1;i<=cnt3;i++){
		if(flag[i]==1||book3[i].opt==4)continue;
		if(tmp>=k)break;
		if(book3[i].opt==2&&tmp2+2<=m){
			tmp++;
			ans+=book3[i].val;
			vec.push_back(book3[i].a1);
			vec.push_back(book3[i].a2);
			tmp2+=2;
			flag[i]=flag[mp3[i]]=flag[mp4[i]]=1;
		}
		else if(book3[i].opt==1&&tmp2+1<=m){
			tmp++;
			ans+=book3[i].val;
			vec.push_back(book3[i].a1);
			tmp2+=1;
			flag[i]=1;
		}
		if(tmp2>=m||tmp>=k)break;
	}
	for(int i=1;i<=cnt3;i++){
		if(flag[i]==1)continue;
//		cout<<i<<' '<<book3[i].a1<<' '<<book3[i].a2<<"wdnmd"<<book3[i].val<<'\n'; 
		if(book3[i].opt==2&&tmp2+2<=m){
			ans+=book3[i].val;
			vec.push_back(book3[i].a1);
			vec.push_back(book3[i].a2);
			tmp2+=2;
			flag[i]=flag[mp3[i]]=flag[mp4[i]]=1;
		}
		else if(book3[i].opt==1&&tmp2+1<=m){
			ans+=book3[i].val;
			vec.push_back(book3[i].a1);
			tmp2+=1;
			flag[i]=1;
		}
		else if(book3[i].opt==0&&tmp2+1<=m){
			ans+=book3[i].val;
			vec.push_back(book3[i].a1);
			tmp2++;
			flag[i]=1;
		}
		else if(book3[i].opt==4&&tmp2+1<=m){
			ans+=book3[i].val;
			vec.push_back(book3[i].a1);
			tmp2++;
			flag[i]=flag[mp5[i]]=1;
		}
		if(tmp2>=m)break;
	}
	if(tmp<k){
		cout<<-1;
		return 0;
	}
	cout<<ans<<'\n';
	for(int i=0;i<vec.size();i++){
		cout<<vec[i]<<' ';
	}
	return 0;
} 
/*
27 5 1
232 0 1
72 0 1
235 0 1
2 0 1
158 0 0
267 0 0
242 0 1
1 0 0
64 0 0
139 1 1
250 0 1
208 0 1
127 0 1
29 0 1
53 0 1
100 0 1
52 0 1
229 0 0
1 0 1
29 0 0
17 0 1
74 0 1
211 0 1
248 0 1
15 0 0
252 0 0
159 0 1
*/

大模拟,从 #4 WA 到 #5,#6,#8,#10

救命啊

2021/11/11 21:57
加载中...