Always keep a begi|

luckydrawbox

园龄:4个月粉丝:1关注:2

题解 P7369 【[COCI2018-2019#4] Elder】

题意

一开始一个魔杖在一个巫师手中,接下来 NN 轮战斗,每轮下来如果拿着魔杖的巫师被打败,就把魔杖传给下一个巫师。

求:

1.1. 最后拿着魔杖的巫师。

2.2. 拿过魔杖的巫师的个数。

分析

对于第一个问题:我们可以把被老魔杖效忠的巫师抽象成一个变量,一开始先赋值成老魔杖的原主人,接下来每轮如果被老魔杖效忠的巫师被打败,就把胜利的巫师覆盖在原来的上面,最后变量的值就是最后效忠的巫师。

对于第二个问题:我们建立一个 bool 型的 bb 数组,表示某个巫师是否被效忠过,因为表示巫师的都是大写字母,所以只要 bool b[26] 就行了,若某个巫师的大写字母用 cc 来表示,则他对应的下标为 cA c-'A\ '。我们在解决第一个问题的同时,可以不断把每个覆盖的巫师对应的 bcA b_{c-'A\ '} 赋值为 tureture,最后统计一下就行了。

代码

#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 中国大陆许可协议进行许可。

posted @   luckydrawbox  阅读(1)  评论(0编辑  收藏  举报  
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起