Gym 101775C - Traffic Light - [思维题]

题目链接:http://codeforces.com/gym/101775/problem/C

 

题意:

给出 N 个红绿灯,又给出 N+1 个距离 Si=S0,S1,,SN,代表从第 i 个路灯到第 i+1 个路灯的距离(第 0 个距离代表从家到第一个红绿灯的距离,第 N 个距离代表从最后一个红绿灯到公司的距离)。

现在每个红绿灯有 Ai 秒的绿灯时长,Bi 秒的红灯时长,所有的红绿灯的 Ai+Bi 都相等,你可以通过设置一个 OFFi 秒的偏移量来使得每个红绿的时间周期前后偏移。

现在你有可能在任何时刻从家出发,可以通过设置所有 OFFi 使得你在最坏情况下耗时最少,问是这个耗时是多少。

 

题解:

最坏情况是所有红绿灯中,红灯时间最长的那个红绿灯的红灯时间,全被你等了。然后剩下的所有交通灯都可以通过设置偏移量来让你经过时正好为绿灯。

别问我具体怎么证明,我不会……等有空了并且脑子清醒的时候也许可以试试?

 

AC代码:

复制代码
#include<bits/stdc++.h>
using namespace std;
const int MAX_N=1e3+5;
double S[MAX_N];
double A[MAX_N],B[MAX_N];
int main()
{
    int T;
    cin>>T;
    for(int kase=1;kase<=T;kase++)
    {
        int N;
        cin>>N;
        for(int i=0;i<=N;i++) scanf("%lf", S+i);
        double _max=-1;
        for(int i=1;i<=N;i++)
        {
            scanf("%lf%lf",A+i,B+i);
            _max=max(_max,B[i]);
        }
        for (int i=0;i<=N;i++) _max+=S[i];
        printf("Case #%d: %.6lf\n",kase,_max);
    }
}
复制代码

(盗用一下队友的代码,嘿嘿……)

posted @   Dilthey  阅读(789)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示