UVALive - 2949 Elevator Stopping Plan

10 篇文章 0 订阅
8 篇文章 0 订阅

把我坑惨了。。。

二分时间,之后是贪心,有点类似于选择尽量少的点去覆盖区间,要选择第一个区间的最后一个点。

注意,开始的几个点,如果楼层比较低,以至于直接走上去都可以,就直接跳过不考虑。

uvalive不知怎么不判题了,在poj上交的

#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAX 35000

using namespace std;

int input[MAX],front,rear,mid;

int main()
{
    int n,i,j,time,cur,start,y,all,ans[MAX];
    while(scanf("%d",&n)&&n)
    {
        for(i=0;i<n;i++)
            scanf("%d",&input[i]);
        sort(input,input+n);
        rear=500000000,front=0;
        while(front+1<rear)
        {
            mid=(front+rear)/2;
            time=0,start=1,all=0;
            for(cur=0;cur<n;cur++)
                if(input[cur]>mid/20+1)
                break;
            if(cur==n)
                time=input[n-1]*20-20;;
            while(cur<n)
            {
                y=(4*start+20*input[cur]+mid-time)/24;
                if(y<start)
                {
                    front=mid;
                    goto next;
                }
                if(y>input[n-1])
                    y=input[n-1];
                ans[all++]=y;
                for(i=cur;i<n;i++)
                {
                    if(time+(y-start)*4+(input[i]-y)*20>mid)//写错一次
                    {
                        break;
                    }
                }
                cur=i;
                time+=(y-start)*4+10;
                if(cur==n)
                    time-=10;
                start=y;
            }
            if(time>mid)
                front=mid;
            else
                rear=mid;
                next:{}
        }
        printf("%d\n",rear);
        //printf("%d",all);
        //for(i=0;i<all;i++)
        //    printf(" %d",ans[i]);
       // puts("");
    }
    return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值