社区讨论

样例全过但是洛谷测爆零了……

P7913[CSP-S 2021] 廊桥分配参与者 9已保存回复 15

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
15 条
当前快照
1 份
快照标识符
@lobi18e7
此快照首次捕获于
2023/10/29 21:20
2 年前
此快照最后确认于
2023/11/04 02:33
2 年前
查看原帖
还有救吗还有救吗救救孩子真的要睡不着了
CPP
#include<iostream>
#include<cstdio>
#include<utility>
#include<queue>
using namespace std;
int n,m1,m2,tmp1,tmp2,cnt,cntmax,ldm1,ldm2,cntld;
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >t1_0;
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >t2_0;
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >t1;
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >t2;
pair<int,int> tmp;
int main()
{
	freopen("airport.in","r",stdin);
	freopen("airport.out","w",stdout);
	cin>>n>>m1>>m2;
	if(n>=m1+m2){cout<<m1+m2<<endl;return 0;}
	for(int i=0;i<m1;++i)
	{
		cin>>tmp1>>tmp2;
		t1_0.push(make_pair(tmp1,tmp2));
	}
	for(int i=0;i<m2;++i)
	{
		cin>>tmp1>>tmp2;
		t2_0.push(make_pair(tmp1,tmp2));
	}
	for(ldm1=0;ldm1<=m1&&ldm1<=n;ldm1++)
	{
		ldm2=n-ldm1;
		t1=t1_0;t2=t2_0;cntld=0;cnt=0;
		//cout<<ldm1<<endl;
		if(ldm1>0&&ldm1<m1)
		{
			priority_queue<int,vector<int>,greater<int> >ld;
			tmp=t1.top();
			t1.pop();
			ld.push(tmp.second);
			++cntld;++cnt;//cout<<tmp.first<<" "<<tmp.second<<endl;
		    for(int i=1;i<m1;i++)
	    	{
	    		tmp=t1.top();
	    		t1.pop();
	    		while(tmp.first>ld.top()&&cntld>0)
	            {
	            	ld.pop();--cntld;
            	}
            	if(cntld<ldm1){ld.push(tmp.second);++cntld;++cnt;/*cout<<tmp.first<<" "<<tmp.second<<endl;ptld();*/}
	    	}
	    }
	    else if(ldm1==m1)cnt+=m1;
	    cntld=0;
	    //cout<<ldm2<<endl;
	    if(ldm2>0&&ldm2<m2)
	    {
	    	priority_queue<int,vector<int>,greater<int> >ld;
	    	tmp=t2.top();
			t2.pop();
			ld.push(tmp.second);
			++cntld;++cnt;//cout<<tmp.first<<" "<<tmp.second<<endl;
		    for(int i=1;i<m1;i++)
	    	{
	    		tmp=t2.top();
	    		t2.pop();
	    		while(tmp.first>ld.top()&&cntld>0)
	            {
	            	ld.pop();--cntld;
            	}
            	if(cntld<ldm2){ld.push(tmp.second);++cntld;++cnt;/*cout<<tmp.first<<" "<<tmp.second<<endl;*/}
	    	}
		}
		else if(ldm2>=m2)cnt+=m2;
		if(cnt>cntmax)cntmax=cnt;
		//cout<<cnt<<endl<<endl;
	}
	cout<<cntmax<<endl;
}

回复

15 条回复,欢迎继续交流。

正在加载回复...