Game

题目背景

SOURCE:NOIP2015-SHY4

题目描述

Alice 和 Bob 正在玩一个游戏,两个人从 1 轮流开始报数,如果遇到 7 的倍数或者遇到的这个数的十进制表示中含 7 ,则遇到的那个人需要喊“过”。

例如:

1 2 3 4 5 6 过 8 9 10 11 12 13 过 15 16 过 18 ……

游戏过后,Bob 提出了一个问题:在区间 [L,R] 里有多少数要喊“过”?

输入格式

第一行一个整数 N ,表示共有 N 组数据。

接下来 N 行,每行两个整数 L 和 R ,表示区间 [L,R] 。

输出格式

共 N 行,每行一个整数。分别表示每一组数据的答案。

样例数据 1

输入 

3

5 10

7 30

2 100

输出

1

6

30

备注

【数据范围】

对 40% 的输入数据 :N≤30, L,R≤10^6

对 70% 的输入数据 :N≤300, L,R≤10^9

对 100% 的输入数据 :N≤3000, L,R≤10^18

sb数位dp,考试的时候输出时用的是lld丢了30分excuse me?

代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,num[20],len;
ll L,R,dp[20][7][2][2];
inline ll dfs(int pos,int mod,bool sev,bool limit){
    if(dp[pos][mod][sev][limit]!=-1)return dp[pos][mod][sev][limit];
    if(pos==len+1)return dp[pos][mod][sev][limit]=(sev||mod==0);
    int up=limit?num[pos]:9;
    ll tmp=0;
    for(int i=0;i<=up;++i)tmp+=dfs((pos+1),(((mod<<3)+(mod<<1)+i)%7),(i==7||sev),(limit&&i==up));
    return dp[pos][mod][sev][limit]=tmp;
}
inline ll solve(ll x){
    len=0;
    memset(dp,-1,sizeof(dp));
    while(x)num[++len]=x-x/10*10,x/=10;
    reverse(num+1,num+len+1);
    return dfs(1,0,false,true);
}
int main(){
    scanf("%d",&n);
    while(n--)scanf("%lld%lld",&L,&R),printf("%lld\n",solve(R)-solve(L-1));
    return 0;
}

2018.08.18 NOIP模拟 game(数位dp)的更多相关文章

  1. 2018.08.18 NOIP模拟 travel(贪心)

    Travel 题目背景 SOURCE:NOIP2015-SHY4 题目描述 小 A 要进行一次旅行.这回他要在序号为 1 到 n 的 n 个城市之间旅行.这 n 个城市之间共有 m 条连接两个城市的单 ...

  2. 2018.08.18 NOIP模拟 snow(最大流)

    Snow 题目背景 SOURCE:NOIP2015-SHY4 题目描述 有一天,TT 要去 ABC 家.ABC 的大门外有 n 个站台,用 1 到 n 的正整数编号,TT 需要对每个站台访问恰好一定次 ...

  3. 2018.08.19 NOIP模拟 number(类数位dp)

    Number 题目背景 SOURCE:NOIP2015-SHY-10 题目描述 如果一个数能够表示成两两不同的 3 的幂次的和,就说这个数是好的. 比如 13 是好的,因为 13 = 9 + 3 + ...

  4. 2018.08.29 NOIP模拟 movie(状压dp/随机化贪心)

    [描述] 小石头喜欢看电影,选择有 N 部电影可供选择,每一部电影会在一天的不同时段播 放.他希望连续看 L 分钟的电影.因为电影院是他家开的,所以他可以在一部电影播放过程中任何时间进入或退出,当然他 ...

  5. 2018.08.19 NOIP模拟 dp(二分+状压dp)

    Dp 题目背景 SOURCE:NOIP2015-SHY-10 题目描述 一块土地有 n 个连续的部分,用 H[1],H[2],-,H[n] 表示每个部分的最初高度.有 n 种泥土可用,他们都能覆盖连续 ...

  6. 2018.08.30 NOIP模拟 wall(模拟)

    [问题描述] 万里长城是中国强大的标志,长城在古代的用途主要用于快速传递军事消息和抵御 外敌,在长城上的烽火台即可以作为藏兵的堡垒有可以来点燃狼烟传递消息. 现在有一段 万里长城,一共有 N 个烽火台 ...

  7. 2018.08.22 NOIP模拟 string(模拟)

    string [描述] 给定两个字符串 s,t,其中 s 只包含小写字母以及*,t 只包含小写字母. 你可以进行任意多次操作,每次选择 s 中的一个*,将它修改为任意多个(可以是 0 个)它的前一个字 ...

  8. 2018.10.26 NOIP模拟 瓶子 (dp/贪心)

    传送门 正解是dp并不想去想了. 自己yy了一个贪心拿了95pts95pts95pts,唯一没过的点还只有一个地方错了,面向数据变成之后过啦! 所以我讲讲如何贪心. 考虑到最后都只会合并成一种颜色,所 ...

  9. 2018.08.22 NOIP模拟 shop(lower_bound+前缀和预处理)

    Shop 有 n 种物品,第 i 种物品的价格为 vi,每天最多购买 xi 个. 有 m 天,第 i 天你有 wi 的钱,你会不停购买能买得起的最贵的物品.你需要求出你每天会购买多少个物品. [输入格 ...

随机推荐

  1. ajax方式表单拦截

    html <!DOCTYPE html> <html> <head> <title></title> <meta charset=&q ...

  2. DEMO: springboot 与 freemarker 集成

    直接在 DEMO: springboot 与 mybatis 集成 基础上,进行修改. 1.pom.xml 中引用 依赖 <dependency> <groupId>org.s ...

  3. DB2 to mysql

    1.安装DB2 create database testdb connect to testdb 2. 将DB2 ixf格式into DB2 IMPORT FROM /tabxxx.IXF OF IX ...

  4. UI5-文档-2.5-开发混合Web容器

    开发混合Web容器 您可以将移动应用程序开发为混合应用程序,该混合应用程序由本机应用程序包装程序(例如PhoneGap)和HTML查看器组成,用于在用户界面上显示内容. 混合应用程序的优点是可以在应用 ...

  5. centos7 防火墙配置

    firewall-cmd --zone=public --add-port=80/tcp --permanentfirewall-cmd --zone=public --add-port=8080/t ...

  6. exception keynote

    [exception keynote] Note that the parentheses around this tuple are required, because except ValueEr ...

  7. Win32 Debug & Release

    今天帮汤老师调试程序,他生成的程序不能运行,怀疑子程序之间编译顺序的问题:我试了之后,也出现同样的问题,但是把Win32 Debug 换成Win32 Release却可以运行了. 网上搜索了下,在CV ...

  8. DOS 命令集锦——最常用命令

    一. 常用命令: cd 改变当前目录   sys 制作DOS系统盘 (电脑入门到精通网 www.58116.cn) copy 拷贝文件  del 删除文件 deltree 删除目录树    dir 列 ...

  9. python之面向对象之类变量和实例变量

    #Auther Bob #--*--conding:utf-8 --*-- #这里的变量全部都是实例变量 class Role(object): def __init__(self,name,role ...

  10. linux-centos6-rabbitmq安装及配置

    服务器版本centos6.8 一.先安装Erlang 具体安装哪个版本可以对照 http://www.rabbitmq.com/which-erlang.html 如下图: 准备安装RabbitMQ3 ...