山东第十届acm省赛折戟题—思维加优先队列(状态安排)H - Tokens on the Segments详解

还是差了一些东西,卡在了这个题上面,果然和银牌是有差距的,差的就是些许思维,和对数据的安排策略。
数据的大小就预示了只能用十分初级的数据来检测自身的策略走向,而不能使用数组之类在整合线段上检测。
这个题其实暴力也能过,考察的还是胆量。
#include<stdio.h>
#include
#include
#include
using namespace std;
struct st
{
int x,y;
}q;
struct cmp//排序策略,贪心思维
{
bool operator()(const st&t1,const st&t2)
{
if(t1.x!=t2.x)
return t1.x>t2.x;
return t1.y>t2.y;
}
};
priority_queue<st,vector,cmp> gt;//优先队列
int f()
{
int count=0,mi=-1;
while(!gt.empty())//增加一个数据,贪心的从左向右,该数据用来测量最左端走到了哪个地方
{//优先队列的状态转移
q=gt.top();
if(q.x>mi)
{
mi=q.x;
count++;
gt.pop();
}
else if(mi==q.x&&q.x<q.y)
{
q.x++;
gt.pop();
gt.push(q);
}
else if(mi>q.x&&mi+1<=q.y)
{
count++;
mi++;
gt.pop();
}
else
gt.pop();
//printf("%d %d %d\n",q.x,q.y,count);
//printf("%d",gt.size());
}
return count;
}
int main()
{
int T,i,j,n,r1,r2;
scanf("%d",&T);
st p;
for(i=0;i<T;i++)
{
scanf("%d",&n);
for(j=0;j<n;j++)
{
scanf("%d%d",&r1,&r2);
p.x=r1;
p.y=r2;
gt.push§;
}
int y=f();
printf("%d\n",y);
}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值