题目传送门

这,是一道及其高深的题

它贯穿了字符串算法

并且。。。

哎呀编不下去了

好了废话不多说

看题!

首先
弱智问题来了
数字串是什么?
答曰:数字组成的字符串(非常好!)
所以,我们得知
这道题必然贯穿了字符串了使用方法
并且这是一套CSP-J的模拟赛
所以相比之下,难度也一定与CSP-J的难度差(cha)不(de)多(yuan)

那么我们来看一下输入
输入它的每一个数字之间居然是连起来的!!??
那我们该怎么输入呢?
由于我们用的是基本统治了整个OI帝国的C++
P党不要打我我只会C++我太菜了
所以这时候我们就可以用到一个强大的东西:
字符数组字符串形式输入(输出)
伪代码如下
---------------------------------------------华丽丽的分割--------------------------------

/*这只是一个将字符数组当做字符串处理的样例伪代码*/
char s[11111];//定义一个字符数组
cin>>s;//以字符串的形式将其输入(注意下标是从0开始而不是从1开始)
len=strlen(s);//计算它的长度
for (int i=len-1;i>=0;i--)
    cout<<s[i];//将其倒序输出

于是有些像我这样的强迫症患者就有些不爽了
我就是要让下标从1开始
你能咋地?
大不了我不要这100分了
大不了我不要CSP-J一等奖了
大不了我不AK IOI了
好吧下面我们说一下将下标以1开始记录
“诶我知道!!!”
这时候某位学了指针的大佬跑过来
“把cin>>s 改成cin>>s+1就OK了,就是让他以地址加一的形式存储”
然后又有一位大佬跑过来按照上一位大佬的方法改了一下上面的代码
发现不对
“我的程序错了

到底是错在哪里呢?
经过了一次又一次的Debug之后
我们发现了一个严峻的事实:
我的len为啥等于0!!??
于是聪明的你把strlen(s)改成了strlen(s+1)
天秀一般的AC了
那到底是为什么呢?
既然我们是将其看作字符串来存储的
那么就相当于说
我连续定义了两个字符串a和b
那么b的地址就是a+1
所以呢
s+1和s
在这里其实我们可以看作两个不同的字符串
但是这两个字符串又有一种微妙的联系
至于这种联系是什么
好像和我们的正题扯远了
所以大家就自己慢慢用debug的方式摸索吧

好了话不多说
回到题目
我们发现题目已经很良心的为我们加粗了那些关键的地方:
他们一起抽取一个只由数字0~9组成的数字串,如果数字串包含数字6,或者,数字串中的数字0的个数比数字1的个数多,那么Alice获胜,否则Bob获胜.
那么
我们就跟着他的要求来写一份代码吧
然后兴冲冲的交上去
为什么没满?
到处差错
还是没发现为啥
“按理来说这种题怎么会错呢(我这种OI萌新都对了),这绝对不合理”
然后突然一看
最后一页还有好多错了的
仔细看一下
才发现
错误真的是各种各样啊
那我说一下比较常见的几个错误吧

  1. 以字符串的形式输入,但是在比较的时候却没有吧1和0带上单引号,这时候C++识别到的是数字,自动判定为该字符的ASCII码,所以由于ASCII码是1的字符是一个奇奇怪怪的东西(反正不是数字),所以在if语句中都没法记录0和1的个数,于是最终num1==num0输出Bob,50分
  2. 数组开小了;明明是1后面5个0,非要开成只有5位数字,于是你就得到了一个什么奇奇怪怪的段错误其实就是RE
  3. 明明是num0>num1时输出Alice,我偏要写成输出Bob或者我偏要加一个1等号

以上是此题常见错误(不得不说这题数据有点水啊输出随便输出一个都是50分

我们来看一下正解
---------------华丽丽的分割线-------------------

#include<bits/stdc++.h>
//万能头是个好东西,就是机惨的时候不包括windiws.h和con
using namespace std;
int len,num1,num0;
char s[111111];//开一个字符数组(当然我们也可以开一个字符串)
int main()
{
    cin>>s;//以字符串形式输入这个字符数组
    len=strlen(s);//记录该字符串长度
    for (int i=0;i<len;i++)
    {
        if (s[i]=='1')//如果这个位置上数字为1(注意这时的数字是字符型而不是整形),记录1的累加器加加
            num1++;
        if (s[i]=='0')
            num0++;//同理,记录0的累加器加加
        if (s[i]=='6')
        {//如果这个字符为6
            printf("Alice\n");//输出Alice
            return 0;//直接结束程序
        }
    }
    if (num0>num1)//比较0和1的个数
        printf("Alice\n");
    else
        printf("Bob\n");//输出
    return 0;
}

萌新在牛客上的第一篇题解
大家支持一下吧
谢谢各位大佬