WAon#11求调
查看原帖
WAon#11求调
1377813
Luo_Saisei楼主2024/8/12 08:53
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
namespace IO {
	template<class I>
	inline void read(I &x) {
		x = 0;
		I f = 1;
		char c = getchar();
		while(c < '0' || c > '9') {
			if(c == '-') f = -1;
			c = getchar();
		}
		while(c >= '0' && c <= '9') {
			x = x * 10 + c - '0';
			c = getchar();
		}
		x *= f;
	}
	template <typename T,typename ...Args>
	inline void read(T &tmp,Args &...tmps) {
		read(tmp);
		read(tmps...);
	}
	template<class T>
	inline void write(T x) {
		if(x<0) {
			putchar('-');
			x=-x;
		}
		if(x>=10) {
			write(x/10);
		}
		putchar(x%10+'0');
	}
}
using namespace IO;
#define int long long
const int N=1e5+10;
struct customer{
	int d,l,n;
}cus[N];
map<int,int> mp;
map<int,int> mp2;
int n,m,kmax;
map<int,vector<int>> cmp;
vector<pair<int,int>> vec;
bool visc[N],visp[N];
signed main() {
	read(n);
	for(int i=1;i<=n;i++) {
		int ci,si;
		read(ci,si);
		mp[si]=ci;
		mp2[si]=i;
	}
	read(m);
	for(int i=1;i<=m;i++)
	{
		cus[i].n=i;
		read(cus[i].d,cus[i].l);
		cmp[cus[i].l].push_back(i);//尺码是l的能买他
		cmp[cus[i].l+1].push_back(i);//l-1他也能买
	}
	typedef map<int,vector<int>>::iterator IT;
	for(IT it=cmp.begin();it!=cmp.end();it++)
	{
		int pos=it->first;
		sort(cmp[pos].begin(),cmp[pos].end(),greater<int>());
	}
	typedef map<int,int>::reverse_iterator It;
	for(It it=mp.rbegin();it!=mp.rend();it++)
	{
		int key1=it->first;
		int key2=it->second;
		if(visc[key1]) continue;//这件商品买过 没办法卖
		for(auto x:cmp[key1])
		{
			if(!visp[x]&&cus[x].d>=key2)//没买过 而且钱够
			{
				kmax+=mp[key1];
				vec.push_back(make_pair(x,mp2[key1]));
				visp[x]=visc[key1]=true;//标记为买过
				break;
			}	
		}
	}
	cout<<kmax<<endl;
	cout<<vec.size()<<endl;
	for(auto x:vec) cout<<x.first<<" "<<x.second<<endl;
	return 0;
}
2024/8/12 08:53
加载中...