hdu4861 && hdu4864

http://acm.hdu.edu.cn/showproblem.php?pid=4864
http://acm.hdu.edu.cn/showproblem.php?pid=4861
1001 打表找规律即可 最后结论是 k/(p-1) & 1
1004
一道贪心,数据范围n,m均为1e6,二分图km算法和费用流均无望通过
想到关于每个任务,贪心的寻找比他大的时间中所有的机器,因为对于固定任务的金钱是固定的,所以只要能满足要求的机器即可,所以贪心寻找level最低的即可
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;

vector<pair<pair<int ,int>,int> > things;
multiset<pair<int ,int> > sj;
int main()
{
	int n , m ;
	while(scanf("%d%d",&n,&m)!=EOF)
	{
		things.clear();
		for (int i = 1; i <= n ; i ++)
		{
			int x , y ;
			scanf("%d%d",&x,&y);
			things.push_back(pair<pair<int,int>,int>(pair<int,int>(y,x),1));		
		}
		for	(int i = 1; i <= m ; i ++)
		{
			int x , y ;
			scanf("%d%d",&x,&y);
			things.push_back(pair<pair<int,int>,int>(pair<int,int>(y,x),0));
		}
		sort(things.begin(),things.end());
		long long ans = 0 , ansp = 0 ;
		sj.clear();
		vector<pair<pair<int,int>,int> >::iterator it;
		for (it = things.begin();it!=things.end();it++)
		{
			if (it->second==0)
			{
				sj.insert(pair<int,int>(-it->first.second,-it->first.first));
			}
			else
			{
				multiset<pair<int,int> >::iterator itm;
				itm = sj.lower_bound(pair<int,int>(-it->first.second,-it->first.first));
				if(itm == sj.end()) continue;
				ansp++;
				ans += 500*(-itm->first)+2*(-itm->second);
				sj.erase(itm);
			}
		}
		cout << ansp <<" "<< ans <<endl;
	}
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值