CF469A I Wanna Be the Guy

· · 题解

CF469A题解

本人第一篇提交的题解,超级激动

萌新一个,代码写的非常水。

题目理解

有一个若干关的游戏,两个人分别可以通过所有关卡中的一部分关,给出两个人各自都能通过的关卡数以及所有关卡编号 ,当两人合作时是否能够通过所有关?

输入输出解析

输入

4

3 1 2 3

2 2 4

可以看到,第一个人可以通过 13 关,而第二个人能通过第二和第四关,说明两人合作时,所有关卡都可以全部通过过,故输出:

“I become the guy.”

如果两人合作并不能通过所有的关卡,输出:

“Oh, my keyboard!”

解题思路

本题数据范围并不大,只有 n \le100,所以一个暴力模拟就可以轻松水过去 (然而现实中我做了快10遍才过的

先开一个大数组 ,存储每个关的通过信息(初始为 0,表示不通过)。

再依次输入通关信息,并在数组中找到对应的下标并修改为 1(表示通关)。

最后,从下标为 1 开始到 n 依次循环,检查是否都为通过(也就是检查是否该元素为 1)。

然后一个简单的判断输出就好啦!

附上本人超级水的代码 & AC记录

#include<iostream>
#include<cmath>
#include<vector>
#include<map>
#include<cstdio>
#include<algorithm>

using namespace std;

int main()
{
    //定义n,并输入n
    int n;
    cin>>n;
    //开一个大数组
    int ans[200];
    //初始化均为0
    for(int i=0;i<200;i++) ans[i]=0;
    //x存储的是小x通过的关卡数,y存储的是小y的通过关卡数
    int x;
    int y;
    int tmp;
    cin>>x;
    //依次存储x的通关信息
    for(int i=0;i<x;i++){
        cin>>tmp;
        ans[tmp]=1;
    }
    cin>>y;
    //依次存储y的通关信息
    for(int i=0;i<y;i++){
        cin>>tmp;
        ans[tmp]=1;
    }
    //循环检查
    int check=0;
    for(int i=1;i<n+1;i++){
        if(ans[i]==0){
            check=0;
            cout<<"Oh, my keyboard!"<<endl;
            break;
        }else if(ans[i]==1){
            check =1;
        }
    }
    if(check){
        cout<<"I become the guy."<<endl;
    }

}

本人的AC记录。

代码有很多有待优化的地方。

谢谢各位!

—— 清小秋 2021.8.2