acwing-1088旅行问题

acwing-1088旅行问题原题链接John 打算驾驶一辆汽车周游一个环形公路。公路上总共有 n 个车站,每站都有若干升汽油(有的站可能油量为零),每升油可以让汽车行驶一千米。John 必须从某个车站出发,一直按顺时针(或逆时针)方向走遍所有的车站,并回到起点。在一开始的时候,汽车内油量为零,John 每到一个车站就把该站所有的油都带上(起点站亦是如此),行驶过程中不能出现没有油的情况。任务:判断以每个车站为起点能否按条件成功周游一周。输入格式第一行是一个整数 n,表示环形公路上的车站数;接下来 n 行,每行两个整数

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

原题链接
John 打算驾驶一辆汽车周游一个环形公路。

公路上总共有 n 个车站,每站都有若干升汽油(有的站可能油量为零),每升油可以让汽车行驶一千米。

John 必须从某个车站出发,一直按顺时针(或逆时针)方向走遍所有的车站,并回到起点。

在一开始的时候,汽车内油量为零,John 每到一个车站就把该站所有的油都带上(起点站亦是如此),行驶过程中不能出现没有油的情况。

任务:判断以每个车站为起点能否按条件成功周游一周。

输入格式
第一行是一个整数 n,表示环形公路上的车站数;

接下来 n 行,每行两个整数 pi,di,分别表示表示第 i 号车站的存油量和第 i 号车站到 顺时针方向 下一站的距离。

输出格式
输出共 n 行,如果从第 i 号车站出发,一直按顺时针(或逆时针)方向行驶,能够成功周游一圈,则在第 i 行输出 TAK,否则输出 NIE。

数据范围
3≤n≤106,
0≤pi≤2×109,
0≤di≤2×109
输入样例:

5
3 1
1 2
5 2
0 1
5 4

输出样例:

TAK
NIE
TAK
NIE
TAK

单调队列

#include<bits/stdc++.h>
using namespace std;
const int N = 3e6 + 10;
const int INF = 0x3f3f3f3f;
typedef long long ll;
int q[N],hh = 0,tt = 0;
int c[N],l[N];
ll sl[N];
int rl[N];
ll rsl[N];
bool res[N];
int main(){ 
   
    int n;
    cin>>n;
    int x,y;
    for(int i = 1;i <= n;i ++){ 
   
        cin>>c[i]>>l[i];
        rl[i + 1] = l[i];
    }
    rl[1] = rl[n + 1];
    for(int i = 1;i <= n;i ++)sl[i] = sl[i - 1] + c[i] - l[i];
    for(int i = n + 1;i <= 2 * n;i ++)sl[i] = c[i - n] - l[i - n] + sl[i - 1];
    for(int i = 1;i <= n;i ++)rsl[i] = rsl[i - 1] + c[n - i + 1] - rl[n - i + 1];
    for(int i = n + 1;i <= 2 * n;i ++)rsl[i] = rsl[i - 1] + c[n - (i - n - 1)] - rl[n - (i - n - 1)];

    for(int i = 1;i <= 2 * n;i ++){ 
   
        if(hh < tt && q[hh] <= i - n)hh ++;
        while(hh < tt && sl[q[tt - 1]] >= sl[i])tt --;
        q[tt ++] = i;
        if(i >= n && i <= 2 * n - 1){ 
   
            if(sl[q[hh]] - sl[i - n] >= 0)res[i + 1 - n] |= true;
            else res[i + 1 - n] = false;
        }
    }
    hh = tt = 0;
    for(int i = 1;i <= 2 * n;i ++){ 
   
        if(hh < tt && q[hh] <= i - n)hh ++;
        while(hh < tt && rsl[q[tt - 1]] >= rsl[i])tt --;
        q[tt ++] = i;
        if(i >= n && i <= 2 * n - 1){ 
   
            if(rsl[q[hh]] - rsl[i - n] >= 0)res[2 * n - i] |= true;
            else res[2 * n - i] |= false;
        }
    }
    for(int i = 1;i <= n;i ++){ 
   
        if(res[i])cout<<"TAK"<<endl;
        else cout<<"NIE"<<endl;
    }
    
    system("pause");
    return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168516.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 玄门日诵早坛功课经注解_玄门日诵晚课经文

    玄门日诵早坛功课经注解_玄门日诵晚课经文加“◎”处十方韵功课中一般不诵,诸括号内为各部分名称,亦不诵此为在青羊宫董至光道长手打版本的基础上,我参照西安万寿八仙宫念诵音频加以断句与别字修正后的版本,太上玄门日诵早课仙经[澄清韵]琳琅振响十方肃清河海静默山岳吞烟万灵振伏招集群仙天无氛秽地无妖尘冥慧洞清大量玄玄也[举天尊]大罗三宝天尊◎[小提纲]灵音到处灭罪消愆宝号宣时扶危救难将当有开坛演教之偈仰劳道众随声应和[双吊挂]上坛齐举

    2025年7月16日
    4
  • Idea激活码最新教程2023.1.4版本,永久有效激活码,亲测可用,记得收藏

    Idea激活码最新教程2023.1.4版本,永久有效激活码,亲测可用,记得收藏Idea 激活码教程永久有效 2023 1 4 激活码教程 Windows 版永久激活 持续更新 Idea 激活码 2023 1 4 成功激活

    2025年5月26日
    7
  • linux设备驱动程序第四部分:从如何定位oops对代码的调试方法,驱动线「建议收藏」

    linux设备驱动程序第四部分:从如何定位oops对代码的调试方法,驱动线

    2022年1月18日
    46
  • 16天记住7000考研单词

    16天记住7000考研单词16天记住7000考研单词(第一天)1.WithmyownearsIclearlyheardtheheartbeatofthenuclearbomb.我亲耳清楚地听到原子弹的心脏的跳动。2.Nextyearthebeardedbearwillbearadearbabyintherear.明年,长胡子的熊将在后方产一头可爱的小崽.

    2022年5月29日
    37
  • 阿里编程规范 pdf_阿里前端开发规范

    阿里编程规范 pdf_阿里前端开发规范阿里编程规范及阿里Java开发规约插件AlibabaJavaCodingGuidelines统一规范标准将有助于提高行业编码规范化水平,帮助行业人员提高开发质量和效率、大大降低代码维护成本。2017年年初,首次公开了《阿里巴巴Java开发手册》,自从第一个版本起,倍受业界关注。为了让开发者更加方便、快速的将规范推动并实行起来,阿里巴巴基于手册内容,研发了一套自动化的IDE检测插件(…

    2025年7月4日
    3
  • [图文教程] 手把手教你安装Android SDK

    [图文教程] 手把手教你安装Android SDK配置环境总是痛苦的,不断地找教程,寻方法……在不断犯错的道路上跌跌撞撞……有点收获还好但是!几百年不配置一次环境,要这经验值何用?记录下来吧,以后也可以傻瓜式跟着教程走我已经下载并安装了AndroidStudio没有下载安装的可移步————>AndroidStudio官网下载开始下载AndroidSDK不用跑了——》AndroidSDK免费下载安装地址不让改不是…下一步吧安装权限……好像问题不大,下一步安装位置……可以更改…

    2022年7月21日
    14

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号