HDOJ 1050 贪心

7 篇文章 0 订阅

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1050

题意:搬桌子从a到b,问最多需要多少时间。

这题目就是英文有点坑。思路很简单用贪心就可以做了。但是要注意由于这是旅馆搬桌子所以a,b要处理一下。

按8间房为例,排列顺序如下:

1 3 5 7

2 4 6 8

如果1到5同时6到7。因为5和6对面所以要20分钟。就是把a如果为偶数--,b为奇数++。处理一下就行了。

#include<bits/stdc++.h>
#define INF 1e18
#define inf 1e9
#define min(a,b) a<b?a:b
#define max(a,b) a>b?a:b
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define IOS ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std ;
typedef long long ll;
typedef unsigned long long ull;
const ll _max = 405;
struct node{
	int num;
	bool cnt;
};
node n[_max];
bool cmp(node n1,node n2){
	if(n1.num == n2.num)
		return !n1.cnt;
	else 
		return n1.num<n2.num;
}
int main(){
	IOS;
    int T;
    cin>>T;
    while(T--){
    	int N;
    	cin >> N;
    	for(int i = 1 ; i <= N ; i++){
    		cin>>n[i].num>>n[i+N].num;
    		n[i].cnt = true;
    		n[i+N].cnt = false;
			if(n[i].num > n[i+N].num)
				swap(n[i].num,n[i+N].num);
			if(n[i].num%2==0) n[i].num--;
			if(n[i+N].num%2==1) n[i+N].num++;
		//	cout<<n[i].num<<" "<<n[i+N].num<<endl;
		}
		sort(n+1,n+1+2*N,cmp);
		int ans = 0;
		int cnt = 0;
		for(int i = 1 ; i <= N*2 ; i++){
			if(n[i].cnt)
				cnt++;
			else cnt--;
			ans = max(cnt,ans);
		}
		cout<<ans*10<<endl;
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值