【题目链接】:http://hihocoder.com/problemset/problem/1482

【题意】

【题解】



递推题.

每次增加3个字符中的一个;然后根据下面这个数组递推;

递推方式看程序

//边界f[1][0] = 1,f[1][2]=1,f[1][6] = 1;
//f[i][0]最后一个字符是‘O’,没有'A'
//f[i][1]最后一个字符是'O',有一个'A'
//f[i][2]最后一个字符是’L',连续1个L,没有'A'
//f[i][3]最后一个字符是’L',连续2个L,没有'A'
//f[i][4]最后一个字符是’L',连续1个L,有'A'
//f[i][5]最后一个字符是’L',连续2个L,有'A'
//f[i][6]最后一个字符是'A',有'A'

【Number Of WA】



0



【完整代码】

#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 1e5+100;
const LL MOD = 1e9+7; int n;
LL f[N][7],ans = 0;
//f[i][0]最后一个字符是‘O’,没有'A'
//f[i][1]最后一个字符是'O',有一个'A'
//f[i][2]最后一个字符是’L',连续1个L,没有'A'
//f[i][3]最后一个字符是’L',连续2个L,没有'A'
//f[i][4]最后一个字符是’L',连续1个L,有'A'
//f[i][5]最后一个字符是’L',连续2个L,有'A'
//f[i][6]最后一个字符是'A',有'A' int main()
{
//freopen("F:\\rush.txt","r",stdin);
ios::sync_with_stdio(false),cin.tie(0);//scanf,puts,printf就别用了!
f[1][0] = 1,f[1][2]=1,f[1][6] = 1;
cin >> n;
rep1(i,2,n)
{
//最后一个字符是O没有A
f[i][0] = (f[i-1][0]+f[i-1][2]+f[i-1][3])%MOD;
f[i][1] = (f[i-1][1]+f[i-1][4]+f[i-1][5]+f[i-1][6])%MOD;
//连续一个L,没有'A'
f[i][2] = f[i-1][0];
//连续两个L,没有'A';
f[i][3] = f[i-1][2];
//连续一个L,有'A'
f[i][4] = (f[i-1][1]+f[i-1][6])%MOD;
//连续2个L,有'A'
f[i][5] = f[i-1][4];
//最后一个字符是A
f[i][6] = (f[i-1][0]+f[i-1][2]+f[i-1][3])%MOD;
}
rep1(i,0,6)
ans = (ans+f[n][i])%MOD;
cout << ans << endl;
return 0;
}

【[Offer收割]编程练习赛10 B】出勤记录II的更多相关文章

  1. hihocoder [Offer收割]编程练习赛14 可疑的记录

    题目3 : 可疑的记录 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi有一棵N个节点的树,编号1-N,其中1号节点是整棵树的根.他把这棵树的N-1条边记录成N-1 ...

  2. 【[Offer收割]编程练习赛10 C】区间价值

    [题目链接]:http://hihocoder.com/problemset/problem/1483 [题意] 中文题 [题解] 二分最后的答案; 二分的时候; 对于每一个枚举的值x; 计算小于等于 ...

  3. hihocoder offer收割编程练习赛10 C 区间价值

    思路: 令v[l, r](0<= l <= r < n)表示区间[l,r]的价值,则长度为n的区间的价值最少为0,最多为n*(n-1)/2.整体对价值二分,求能满足sum{v[l, ...

  4. hihocoder [Offer收割]编程练习赛4

    描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...

  5. hihocoder [Offer收割]编程练习赛61

    [Offer收割]编程练习赛61 A:最小排列 给定一个长度为m的序列b[1..m],再给定一个n,求一个字典序最小的1~n的排列A,使得b是A的子序列. 贪心即可,b是A的子序列,把不在b中的元素, ...

  6. [Offer收割]编程练习赛46

    [Offer收割]编程练习赛46赛后题解 A.AEIOU 分析

  7. [Offer收割]编程练习赛9,10

    题目1 : 闰秒 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 计算机系统中使用的UTC时间基于原子钟,这种计时方式同“地球自转一周是24小时”的计时方式有微小的偏差. ...

  8. 【[Offer收割]编程练习赛14 C】可疑的记录

    [题目链接]:http://hihocoder.com/problemset/problem/1507 [题意] [题解] 如果多出来一个的话; 某个人的父亲节点就会变成两个 找到有两个父亲节点的人就 ...

  9. HihoCoder1670 : 比赛日程安排([Offer收割]编程练习赛41)(模拟)

    描述 H国编程联赛中有N只队伍,编号1~N. 他们计划在2018年一共进行M场一(队)对一(队)的比赛. 为了让参赛队员能得到充分的休息,联赛组委会决定:每支队伍连续两场比赛之间至少间隔一天.也就是如 ...

随机推荐

  1. C# openfiledialog对文本框的操作//C#中OpenFileDialog的使用

    在WebForm中提供了FileUpload控件来供我们选择本地文件,只要我们将该控件拖到页面上了,就已经有了选择本地文件的功能了.而在WinForm中,并没有为我们提供集成该功能的控件,但为我们提供 ...

  2. [BZOJ 1735] Muddy Fields

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1735 [算法] 二分图最小覆盖 [代码] #include<bits/stdc ...

  3. 【BZOJ 1602】 牧场行走

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1602 [算法] 倍增求LCA [代码] #include<bits/stdc+ ...

  4. bzoj 4318 OSU! —— 期望DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4318 期望DP,因为平方的期望不等于期望的平方,所以用公式递推: 第一次推错了囧,还是看这位 ...

  5. Coursera Algorithms week1 查并集 练习测验:1 Social network connectivity

    题目原文描述: Given a social network containing. n members and a log file containing m timestamps at which ...

  6. codevs1288 埃及分数(IDA*)

    1288 埃及分数  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond     题目描述 Description 在古埃及,人们使用单位分数的和(形如1/a的 ...

  7. Python 44 前端概述 、三剑客 、常用标签与分类

    1.前端三剑客是哪三位?文件的后缀内容?在前端开发中的功能是什么? HTML:   .htm .html   内容 CSS:   .css   效果 JS:   .js   行为 2.简述三剑客的主要 ...

  8. 通过JS制作一个简易数码时钟

    设计思路: 数码时钟即通过图片数字来显示当前时间,需要显示的图片的URL根据时间变化而变化. a.获取当前时间Date()并将当前时间信息转换为一个6位的字符串; b.根据时间字符串每个位置对应的数字 ...

  9. Ubuntu16.04开启root用户,并远程登录

    Ubuntu安装完成默认是普通权限的用户,root用户需要手动开启,并且还不含opne-ssh模块 1.给root用户设置密码 #  sudo passwd root 会提示输入unix的新密码,这就 ...

  10. APP加固反调试(Anti-debugging)技术点汇总

    0x00 时间相关反调试 通过计算某部分代码的执行时间差来判断是否被调试,在Linux内核下可以通过time.gettimeofday,或者直接通过sys call来获取当前时间.另外,还可以通过自定 ...