D. Driving Test(贪心+栈)
发布日期:2021-06-30 10:18:04 浏览次数:2 分类:技术文章

本文共 1478 字,大约阅读时间需要 4 分钟。

说是模拟,其实更像贪心

如何清晰的处理超车和限速是关键

Ⅰ . 超 车 \color{Red}Ⅰ.超车 .

遇 到 不 允 许 超 车 的 牌 子 并 不 马 上 无 视 掉 , 而 是 让 遍 历 n o _ a l l o w + + 遇到不允许超车的牌子并不马上无视掉,而是让遍历no\_allow++ ,no_allow++

如 果 后 续 超 车 , 就 加 上 n o _ a l l o w , 意 思 是 无 视 掉 之 前 所 有 超 车 牌 如果后续超车,就加上no\_allow,意思是无视掉之前所有超车牌 ,no_allow,

如 果 遇 到 允 许 超 车 , 那 么 直 接 n o _ a l l o w = 0 如果遇到允许超车,那么直接no\_allow=0 ,no_allow=0

Ⅱ . 限 速 \color{Red}Ⅱ.限速 .

遇 到 限 速 为 s 的 牌 子 怎 么 办 ? 遇到限速为s的牌子怎么办? s?

一 、 当 前 速 度 已 经 大 于 s , 必 须 无 视 一、当前速度已经大于s,必须无视 s,

二 、 当 前 速 度 小 于 等 于 s , 无 视 吗 ? 不 一 定 的 二、当前速度小于等于s,无视吗?不一定的 s,?

不 如 暂 时 不 无 视 , 装 进 限 速 栈 中 不如暂时不无视,装进限速栈中 ,

后 续 的 速 度 超 过 限 制 时 , 就 从 栈 中 倒 回 去 无 视 一 些 限 速 牌 后续的速度超过限制时,就从栈中倒回去无视一些限速牌 ,

#include 
using namespace std;int n,ok,speed,ans,s;stack
q;int main(){ cin >> n; int limit=1e9,no_allow=0;//表示一开始无速度限制 cin >> ok >> speed;//直接读取掉初始速度 for(int i=1;i
> ok; if(ok==1) { cin >> s; while(!q.empty()&&s>limit) { q.pop(),ans++; if( q.empty() ) limit=1e9;//无视了所有限速牌 else limit=q.top(); } speed=s; } else if(ok==2) { ans+=no_allow,no_allow=0;//无视掉前面的超车 } else if(ok==3) { cin >> s; if(speed>s) ans++;//当前车速已经很快,直接无视 else limit=s,q.push(s);//暂时不无视,把限速的放进栈里面 } else if(ok==4) no_allow=0;//允许超车了 else if(ok==5) { limit=1e9; while(!q.empty()) q.pop(); } else no_allow++;//不允许超车牌子数目 } cout<

转载地址:https://issue-is-vegetable.blog.csdn.net/article/details/107226181 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:C. Four Segments(记录前驱dpO(n)解法)
下一篇:C. Naming Company(细节,贪心)

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月20日 17时27分19秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章