XDOJ.T204_单词统计(超强算法)

这题并不难,相信各位都能做出来,但你们使用的算法可能会很复杂。前不久我在洛谷上做了一道相似的题:统计单词数。查看题解时,发现了一个大佬的超强算法——有穷自动机

图灵机大概就是一个“自动机”,就是说代码分好几种状态,每种状态做不同的事。
单看这句话,我也看不懂,举个例子:

输入一个字符串,输入的只有两种字符,一种是字母,一种是空格。现在求一共有几个单词。注意,有可能有多个空格连在一起,开头和结尾都有可能有空格。

那么这是一道简单的有穷自动机,运行时分两种情况:

①是空格

②是字母

(其实当前状态就是上一个字符的状态

那么在遍历数组的时候拿一个变量记录下来当前是什么状态,可以用0代表当前是空格状态,1代表是字母状态

当如果当前状态是1,而现在却遇到空格,那么就计数器加一, 同时要将状态改为0, 如果当前状态是0,现在的字符却是字母,就只将状态改为1

还有一个容易漏掉的情况:如果在跳出循环的时候状态是1,说明最后一个字符是字母而不是空格,要将计数器加一,否则就会少统计一个单词。
然后就是代码:

注:不是本题的代码!!!是这个例子的代码!!!

#include <cstdio>

int main () {
   

    char a[1001];
    int state, ans = 0;

    gets(a);

    if(a[0] == ' ') state = 0;//设置初始值
    else state = 1;

    for(int i = 1; a[i]; i ++ ) {
   //要从一开始遍历,因为零已经遍历过了
        if(a[i] == ' ') {
   //是空格
            if(state 
  • 25
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值