leetcode之Dota2参议院

news/2024/11/29 3:48:30/

题目如下:leetcode 第649题

Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇)
Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每一轮中,每一位参议员都可以行使两项权利中的一项:
禁止一名参议员的权利:
参议员可以让另一位参议员在这一轮和随后的几轮中丧失所有的权利。
宣布胜利:
如果参议员发现有权利投票的参议员都是同一个阵营的,他可以宣布胜利并决定在游戏中的有关变化。

给定一个字符串代表每个参议员的阵营。字母 “R” 和 “D” 分别代表了 Radiant(天辉)和 Dire(夜魇)。然后,如果有 n 个参议员,给定字符串的大小将是 n。
以轮为基础的过程从给定顺序的第一个参议员开始到最后一个参议员结束。这一过程将持续到投票结束。所有失去权利的参议员将在过程中被跳过。
假设每一位参议员都足够聪明,会为自己的政党做出最好的策略,你需要预测哪一方最终会宣布胜利并在 Dota2 游戏中决定改变。输出应该是 Radiant 或 Dire。

示例 1:
输入:“RD”
输出:“Radiant”
解释:第一个参议员来自 Radiant 阵营并且他可以使用第一项权利让第二个参议员失去权力,因此第二个参议员将被跳过因为他没有任何权利。然后在第二轮的时候,第一个参议员可以宣布胜利,因为他是唯一一个有投票权的人
示例 2:
输入:“RDD”
输出:“Dire”
解释:
第一轮中,第一个来自 Radiant 阵营的参议员可以使用第一项权利禁止第二个参议员的权利
第二个来自 Dire 阵营的参议员会被跳过因为他的权利被禁止
第三个来自 Dire 阵营的参议员可以使用他的第一项权利禁止第一个参议员的权利
因此在第二轮只剩下第三个参议员拥有投票的权利,于是他可以宣布胜利

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/dota2-senate
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解解读

这一题形象的解释了何为人数多不一定赢,顺序很重要这一问题。
首先第一个人不管是那一方的人,他要除掉的一定是对方家里第一个投票的人,因为对方家第一个投票的人如果不投下去,等到对方家最早形式权利的人时必然会将我方一名议员投掉,我方必然会少一人,所一应该挑选对方家里的第一个人。

算法

首先把我踩过的一个坑给大家分享一下,我第一次做这个题目时被"DDRRR"这个测试案例卡住了,看了半天才发现题目没有看清楚,我横吃横吃写了半天才发现是不是一轮就结束的,如果第一轮没有答案,还好似会有第二轮,第三轮的,结果我的代码没也没法修改了。

  1. 首先将字符串的每个字符拿出来放进各自的queue里面
  2. 进入一个while循环,如果两个队列都不为空,则进行这一轮循环:

2.1 判断两个队列的开头那一个比较大,对于较大的那一个则他会将对家的第一个人投掉,自己可以晋级下一轮。(ps:有同学会问怎么确定就出现在下一轮呢?这一轮的B家不会把它投掉吗?想到这一层的估计都是认真思考的的,现在我们来看看,最开始我们说我们投掉的是最先开始投票的,这个有条件是*在我之后最先开始投票的*,那么就可以想到B投掉的肯定是比我顺序大的那一方,这样就可以看到,即使这一轮A 家中没有比B家大的,那么B投掉的肯定是下一轮中A家最小的。没有冲突。)
2.2 A家和B家队列的末尾元素都出列。

代码

class Solution {
public:string predictPartyVictory(string senate) {int n = senate.size();queue<int> Radiant, Dire;for(int i=0; i<n;i++){if(senate[i]=='R')Radiant.push(i);elseDire.push(i);}while(!Radiant.empty() && !Dire.empty()){if(Radiant.front()<Dire.front()){Radiant.push(Radiant.front()+n);}else{Dire.push(Dire.front()+n);}Radiant.pop();Dire.pop();}if(Radiant.empty())return "Dire";elsereturn "Radiant";//以下可以不用看,因为这是我踩的坑。读题要慎重// int R=0,D=0;// int dead_r=0,dead_d=0;// // for(auto c:senate)// // {//     if(c=='R')//         R++;//     else//         D++;// }// string ans = R>D?"Radiant":"Dire";// while(D>0 && R>0)// {//     for(int i=0;i<senate.size();i++)//     {//         char c = senate[i];//         if(c=='O')//         {//             continue;//         }//         else//         {//             if(c=='R')//         {//             if(dead_r>0)//             {//                 dead_r--;//             }//             else//             {//                 senate[i]='O';//                 D--;//                 dead_d++;//             }//         }//         else//         {//             if(c=='D')//             {//                 if(dead_d>0)//                 {//                     dead_d--;//                 }//                 else//                 {//                     senate[i]='O';//                     R--;//                     dead_r++;//                 }//             }//         }//         if(R<=0)//             return "Dire";//         else if(D<=0)//             return "Radiant";//         }//     }// }// return ans;}
};

http://www.ppmy.cn/news/825660.html

相关文章

dota2服务器位置设置在哪里,《DOTA2》自走棋国服怎么进入 自走棋国服服务器进入方法...

导 读 许多玩家发现自己因为不是进国服&#xff0c;而是在外服&#xff0c;造成了比较严重的卡顿问题&#xff0c;以及队友全是老外的尬尴情况&#xff0c;解决方法很简单在steam里右键Dota2->属性->常规->设置启动选项->... 许多玩家发现自己因为不是进国服&#…

dota2服务器何时修复,《DOTA2》10月10日更新:服务器改善bug饰品修复

DOTA210月10日更新&#xff0c;V社正在推出新的服务器和改进了饰品的管理和聊天栏机制&#xff0c;新的兵器库多了一个收藏&#xff0c;可以轻松排布饰品&#xff0c;可以根据新的过滤器来展示饰品。同时增加了一个通知&#xff0c;用来看最近获得的饰品。 现在可以在聊天标签里…

DOTA2怎么清除缓存_第36期 只要一招:彻底重置Windows图标缓存

废话不多说&#xff0c;独家珍藏绝技&#xff0c;帮你彻底重置Windows图标缓存&#xff0c;Win7到目前最新的Win10(1909)都亲测有效,以后的版本没特别改动的话应该也是有效 重置Windows图标缓存&#xff0c;网上有各种删除db文件&#xff0c;清磁盘缓存的方法&#xff0c;还有用…

dota2自建房间服务器,创建房间与房间设置 - DOTA2 - 刀塔官方网站 - 勇士令状全新上线 天陨旦活动模式推出...

在创建房间界面选择创建房间 玩家进入天辉或者夜魇下面的空位&#xff0c;解说员进入解说频道。 点击编辑设置可以进入设置界面 可以给房间加密码&#xff0c;其他玩家可以用过密码来寻找这个房间&#xff0c; 可以给房间起名字&#xff0c; 如果单机测试可以勾选启用作弊、用A…

dota2自走棋Android怎么更新,dota2自走棋

游戏介绍 《dota2自走棋》是一款战旗类手游&#xff0c;该游戏横空出世上线当天在线人数就突破了10万&#xff0c;十天不到订阅人数超过74万&#xff0c;作为一款60MB的RPG地图&#xff0c;直接让隔壁G胖历时5年亲手打造的硬核大作《Artifact》无地自容&#xff0c;不少没玩过甚…

Linux玩dota2需要什么显卡,dota2最低配置要求 玩dota2需要什么电脑配置

Windows 最低配置: 操作系统: Windows 7 or newer 处理器: Dual core from Intel or AMD at 2.8 GHz 内存: 4 GB RAM 显卡: nVidia GeForce 8600/9600GT, ATI/AMD Radeon HD2600/3600 DirectX 版本: 9.0c 网络: 宽带互联网连接 存储空间: 需要 15 GB 可用空间 声卡: DirectX Co…

抖音seo源码.视频剪辑功能开发(一)

一、短视频抖音seo账号矩阵系统 批量剪辑功能的开发一般有以下几种方式 1. 前端实现&#xff1a;通过前端技术&#xff0c;利用vue jquery layui JavaScript&#xff0c;等语言&#xff0c;实现一个可视化的编辑器&#xff0c;用户可以批量上传视频文件&#xff0c;设置剪…

火车头采集器AI伪原创【php源码】

本文介绍火车头采集器AI伪原创&#xff0c;对于新媒体从业者来说&#xff0c;会写文章是最基本的职业技能&#xff0c;而伪原创是我们经常使用的技能。今天我要讲的是SEO标兵如何在伪原创上创作文章。 首先&#xff0c;原创性永远是最好的&#xff0c;更受读者欢迎。伪原创的出…