题解 P7369 【[COCI2018-2019#4] Elder】
题意
一开始一个魔杖在一个巫师手中,接下来 轮战斗,每轮下来如果拿着魔杖的巫师被打败,就把魔杖传给下一个巫师。
求:
最后拿着魔杖的巫师。
拿过魔杖的巫师的个数。
分析
对于第一个问题:我们可以把被老魔杖效忠的巫师抽象成一个变量,一开始先赋值成老魔杖的原主人,接下来每轮如果被老魔杖效忠的巫师被打败,就把胜利的巫师覆盖在原来的上面,最后变量的值就是最后效忠的巫师。
对于第二个问题:我们建立一个 bool
型的 数组,表示某个巫师是否被效忠过,因为表示巫师的都是大写字母,所以只要 bool b[26]
就行了,若某个巫师的大写字母用 来表示,则他对应的下标为 。我们在解决第一个问题的同时,可以不断把每个覆盖的巫师对应的 赋值为 ,最后统计一下就行了。
代码
#include<bits/stdc++.h>
using namespace std;
int n,sum;
char c,winner,loser;
bool b[26];
int main()
{
cin>>c;
cin>>n;
b[c-'A']=1;//第一次效忠的主人也要算上
for(int i=1;i<=n;i++)
{
cin>>winner>>loser;
if(c==loser)//如果目前效忠的主人失败了
{
c=winner;//改变当前的主人
b[c-'A']=1;//效忠新主人
}
}
for(int i=0;i<26;i++)
if(b[i])sum++;//如果这个主人效忠过就加1
cout<<c<<endl;
cout<<sum<<endl;
return 0;
}
本文作者:luckydrawbox
本文链接:https://www.cnblogs.com/luckydrawbox/p/18526697
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
分类:
题解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步