题目链接:点击查看

题目大意:给出一个字符串s,该字符串是由一台坏掉的打字机生成的,坏掉的打字机会将m打成nn,将w打成uu,问现在给出字符串s,其原本的字符串有多少种可能性

题目分析:因为m会变成nn,w会变成uu,首先字符串s中肯定不能出现字符m和w,特判一下,这是输出0的情况,特判完之后我们只需要找相邻的uu或nn就行了,一开始我的想法是nn不好处理的情况是nnn,所以我们可以优先特判一下nnn,如果不是nnn的话那么我们让相邻两个n结合就好了,但是我忘记了一个很关键的问题,比如一个长度为4的uuuu,我们给他编号分别为1 2 3 4,如果只是相邻两两考虑的话,那么只是1与2的结合,以及3与4的结合,其实实际上2与3也是可以结合的,所以漏情况了

而这个题的正解也是十分巧妙的,我们可以先试着写写看前几项:

u:1

u

uu:2

uu,w

uuu:3

uuu,um,mu

uuuu:5

uuuu,muu,umu,uum,mm

uuuuu:8

uuuuu,muuu,umuu,uumu,uuum,umm,mum,mmu

到此为止吧,我们可以很清楚的观察到,随着相邻的u越来越多,其增长趋势就是个斐波那契数列,这样我们就可以直接预处理一下斐波那契后模拟就好了

代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e5+100;const int mod=1e9+7;LL f[N];void init()
{f[0]=f[1]=1;for(int i=2;i<N;i++)f[i]=(f[i-1]+f[i-2])%mod;
}bool check(string& s)
{for(int i=0;i<s.size();i++)if(s[i]=='m'||s[i]=='w')return true;return false;
}int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);init();string s;cin>>s;if(check(s))return 0*printf("0\n");LL ans=1;for(int i=0;i<s.size();i++){if(s[i]=='u'){int sum=1;while(s[i+1]=='u'){i++,sum++;}ans=ans*f[sum]%mod;}else if(s[i]=='n'){int sum=1;while(s[i+1]=='n'){i++,sum++;}ans=ans*f[sum]%mod;}}printf("%lld\n",ans);return 0;
}

CodeForces - 1245C Constanze's Machine(思维+找规律)相关推荐

  1. CodeForces - 603C Lieges of Legendre(博弈+找规律)

    题目链接:点击查看 题目大意:首先给出n堆石子和一个k值,两人轮流按照规则操作,不能操作的一方即为失败,每一次都有两种操作: 从任意一堆石子中取走一个石子 任选一堆偶数个的石子,将其转换成k堆x/2的 ...

  2. 1245C. Constanze‘s Machine

    C. Constanze's Machine:题目 众所周知,斐波那契数列属于dp #include <bits/stdc++.h> using namespace std; #defin ...

  3. Codeforces Round #242 (Div. 2)C(找规律,异或运算)

    一看就是找规律的题.只要熟悉异或的性质,可以秒杀. 为了防止忘记异或的规则,可以把异或理解为半加运算:其运算法则相当于不带进位的二进制加法. 一些性质如下: 交换律: 结合律: 恒等律: 归零律: 典 ...

  4. Grid game CodeForces - 1104C 放格子|思维|找规律

    题意:4*4的格子中输入0放 2*1的图案输入1放1*2的图案 当摆满一行或一列后此行列图案清空 就想毛熊方块一样 分析:开始感觉很唬人 要搜索还是要dp啥的 后来发现原来2*1就放左下 1*2就放左 ...

  5. 思维--找规律--Codeforces Round #645 (Div. 2) c题

    C. Celex Update 题目大意:给出两点的坐标,找出不同的路径的总数(路径数字总和不同) 思路:根据观察向下走比向右走的增加幅度加1,所以在第i步 向下 对sum的影响是 n-i+1 所以最 ...

  6. CodeForces - 768B Code For 1(找规律)

    题目链接:http://codeforces.com/problemset/problem/768/B点击打开链接 B. Code For 1 time limit per test 2 second ...

  7. CodeForces - 1339E Perfect Triples(打表找规律)

    题目链接:点击查看 题目大意:序列 s 是一个无限数列,现在给出构造方法: 选择三个数 a b c ,将其依次加到序列 s 的最后面,三个数需要满足: a b c 在序列 s 中均未出现过 a b c ...

  8. 第十五届北京师范大学程序设计竞赛决赛(网络同步赛) B lca水 D 思维,找规律...

    第十五届北京师范大学程序设计竞赛决赛(网络同步赛) B. Borrow Classroom 题意:一棵树,点 1为根,一个人从点 b到 点 c再到点 1,第二个人从点 a出发,问第二个人能否截住第一个 ...

  9. C - Sweets Eating 前缀和 + 思维找规律

    传送门 思路:1.找出最优策略 2.优化代码 最主要的是如何优化代码,我们发现m是一个周期,在m周期类的元素不会受到影响,一旦到达一个周期,那么此时的数值就要整体移一位,这个可以用前缀和来实现. 设d ...

最新文章

  1. 启动项目时出现java.io.EOFException异常。
  2. PCL—点云分割(基于凹凸性) 低层次点云处理
  3. 宿主机访问虚拟机中xampp搭建的站点失败
  4. Rocketmq源码分析(一)整体架构
  5. scala java maven项目_IntelliJ IDEA下Maven创建Scala项目的方法步骤
  6. 麒麟linux百度云,百度网盘 Linux 版发布,搭配优麒麟运行更完美!
  7. 人脸识别错误代码437是什么意思_lol手游repeat ready check fails什么意思 解决攻略大全...
  8. C语言编程 简单展开扫雷游戏
  9. 神经网络不收敛的查缺补漏
  10. matlab分支定界法linprog_序列比对(二十二)——中间字符串分支定界方法中更紧的界...
  11. 中汽中心软件测评中心与紫光国微达成芯片认证合作
  12. SpringCloud Config手动刷新及自动刷新
  13. 【BZOJ】2078: [POI2004]WYS
  14. 安装RHEL 7(Centos7类同)
  15. 【提升笔记本续航】WIN10笔记本打开电源选项中的处理器电源管理
  16. 电气器件系列十六:热电偶、热电阻
  17. 李彦宏发布小度在家“解锁”中国家庭市场,被称作AI性价比之王
  18. 调整字体间距属性和文字换行属性
  19. 传统文化群聊摘录(不定时更新)
  20. Java中的偏向锁是什么

热门文章

  1. https安全传输协议
  2. 共享锁和排它锁的用法
  3. tryLock尝试获取锁
  4. IDEA 项目结构旁边出现 0%classes,0% lines covered
  5. springMVC请求流程详解
  6. mysql+%3c%3e+cdata,bbed 使用实现 drop index 操作
  7. php将数组中元素打乱顺序,PHP公开课|学会随机打乱数组元素顺序的函数,你的PHP会学的更好...
  8. LocalDateTime 的常用操作
  9. 【报错笔记】项目使用了JSONArray类,导了import net.sf.json.JSONArray;包报错
  10. gitolite 踩坑记