本文共 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,无视吗?不一定的
不 如 暂 时 不 无 视 , 装 进 限 速 栈 中 不如暂时不无视,装进限速栈中 不如暂时不无视,装进限速栈中
后 续 的 速 度 超 过 限 制 时 , 就 从 栈 中 倒 回 去 无 视 一 些 限 速 牌 后续的速度超过限制时,就从栈中倒回去无视一些限速牌 后续的速度超过限制时,就从栈中倒回去无视一些限速牌
#includeusing 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!