zoukankan      html  css  js  c++  java
  • 3I.处女座的约会(C++)

    处女座的约会(C++)

    点击做题网站链接

    题目描述
    处女座放完了"高利贷",拿到了不少的资金,又可以和小姐姐约会啦!(之前不还是攒钱打比赛的吗)现在处女座拿到了一份宁波市旅游地图决定和小姐姐一起去玩耍。他们来到了动物园,去参观里面的动物。但是很不幸的是,他们在游玩的途中遇到了一只恶龙。
    恶龙长有n个头,但经过了处女座的调教,恶龙变得善良了一些。它的n个头每个头要么仍是邪恶的头,用“1”表示,要么已经变得善良,用“0”表示,因而恶龙的n个头就可以用n位01串来表示。而此时处女座要发挥自己的勇士形象,要把所有的龙头都变成0000⋯00完全善良的龙头。每一次,他可以砍掉龙最右侧的一个头,同时龙会在最左侧长出新的一个头,以保证龙头数量不变。如果他砍掉的是一个1,即邪恶的头,他可以决定龙在最左侧会长出什么样的头;但如果他砍掉了一个善良的头,那么玻璃心的恶龙将会在左侧不受控制的长出一个随机的头,既可能是善良的头,也可能是邪恶的头,而且它总会与处女座作对,尽力的破坏他的计划。
    现在给你一个恶龙头的初始状态,即一个01串,请帮助处女座判断一下,能否在有限步之内让全部的龙头都变成善良的龙头。

    输入描述:
    输入第一行T,表示用例组数。
    之后T行,每行一个01串S表示龙头的初始状态,“0”表示善良的头,“1”表示邪恶的头。

    输出描述:
    对于每组数据,处女座能否将全部的龙头变成善良的头,可以的话输出“cnznb”,不可以则输出“ljcnz”(不含引号)。

    示例1
    输入

    1
    1111

    输出
    cnznb

    备注:
    T≤1000
    |S|≤100
    注意,这个问题可能没有你想的那么简单。显然,处女座必须把一些1变成0,这样才能让1的数量减少并消失。但是如果只是简单的每次把1变成0,最终不见得能取胜。比如,如果龙头的状态是101,那么去掉最右边的1并选择在左边长出一个0,则龙头会变成010;再把010右边的0去掉后,如果左边仍长出一个1,则龙头又变回了101的状态,如此反复,将永远不能得到000。

    解题思路:
    如果用下面这种做法,则会一直输出"cnznb":从右到左,如果最后一位是1就砍掉并在头上加一个0;如果是0的话就砍掉让他随机生成0或1的头,直到第一次出现砍0生成了1的头的情况。如果没有出现这种情况那么这个串已经符合了要求,如果有砍0生成了1的头发生,那么在这之后遇到的1则都生成1的头。这样一轮结束之后,这个01串所表示的二进制数的的大小一定是严格增加了的(因为虽然你可能把一些1变成了0但是有一个高位的0变成了1)而这个二进制数的大小是有限的,因此在有限步内一定可以把这串数变成全0串。

    解题代码:(没有优化)

    #include <iostream>
    using namespace std;
    int main()
    {
        int T;
        cin >> T;
        while(T--)
        {
            string a;
            cin >> a;
            cout << "cnznb" << endl;
        }
        return 0;
    }
    

    优化的代码:

    #include <iostream>
    using namespace std;
    int main()
    {
        std::ios::sync_with_stdio(false);
        int T;
        cin >> T;
        while(T--)
        {
            string a;
            cin >> a;
            cout << "cnznb" << endl;
        }
        return 0;
    }
    

    笔记:

    std::ios::sync_with_stdio(false);
    

    一般来说c++的cin输入会比c的scanf慢,原因是在默认的时候,cin与stdin总是保持同步的,导致cin有许多额外的开销。而使用以上代码语句就可以禁用这个特性,提高效率。
    具体测试可以参考https://blog.csdn.net/yujuan_mao/article/details/8119529

  • 相关阅读:
    生成括号问题(22)
    Starting Jetty: Exception in thread "main" java.lang.UnsupportedClassVersionError: org/eclipse/jetty/start/Main : Unsupported major.minor version 52.0
    Oracle 使用Nid 修改数据库的DBID 和 Database Name
    Oracle SCN与时间的相互转换
    Oracle 启动 停止JOB
    Apache 负载均衡 端口转发 配置
    Oracle 将 A 用户下所有表的增删改查 赋予 B 用户
    更改表空间及数据文件的名称
    Oracle 缓存命中率问题一则(里面有个问题咨询大佬们)
    更改python版本
  • 原文地址:https://www.cnblogs.com/yuzilan/p/10626113.html
Copyright © 2011-2022 走看看