问题描述
小俊很喜欢数学,现在他要给你出一道严肃的数学题。
定义 FxF[x] 为x在十进制表示下各位数字的异或和,例如F1234  1 xor 2 xor 3 xor 4  4F(1234) = 1 xor 2 xor 3 xor 4 = 4。给你两个数 ababa,b(a≤b)。
求Fa  Fa1  Fa2 Fb2  Fb1  FbF[a] + F[a+1] + F[a+2]+…+ F[b−2] + F[b−1] + F[b] 模 109710​9​​+7 的值 。
输入描述
第一行一个TT,表示有TT组数据T26(T<26)。
每组数据第一行一个数aa, 第二行一个数bb,无多余空格。保证∣a∣∣b∣∣a∣,∣b∣不超过100001100001,∣a∣∣a∣ 表示aa的输入位数长度。
输出描述
按输入顺序输出。
第ii组数据格式Case #i: ans
输入样例
4
0
1
2
2
1
10
9999
99999
输出样例
Case #1: 1
Case #2: 2
Case #3: 46
Case #4: 649032
dp[i][j]表示0到10的i次方中有多少个值为j的。ans[j]是表示从0到x中值为j的有多少个。
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
const int mod = 1e9 + 7;int dp[100020][20], ans[20];
char a[100020], b[100020];
int solve(char * str)
{int ret = 0;int len = strlen(str);memset(ans, 0, sizeof(ans));int pre = 0;for (int i = 0; i < len; i++){int num = str[i] - '0';for (int j = 0; j < num; j++)for (int k = 0; k <= 15; k++){ans[pre ^ k ^ j] += dp[len - i - 1][k];ans[pre ^ k ^ j] %= mod;}pre ^= num;}for (int i = 0; i <= 15; i++)ret = (ret + (long long)i * ans[i]) % mod;return ret;
}
int main()
{int t;memset(dp, 0, sizeof(dp));dp[0][0] = 1;for (int i = 0; i < 10; i++) dp[1][i] = 1;for (int i = 2; i < 100010; i++)for (int k = 0; k < 10; k++)for (int j = 0; j <= 15; j++){dp[i][j ^ k] += dp[i - 1][j];dp[i][j ^ k] %= mod;}scanf("%d", &t);int cas = 0;while (t--){cas++;scanf("%s", a);scanf("%s", b);int len = strlen(b);int last = 0;for (int i = 0; i < len; i++)last ^= (b[i] - '0');int ans = (solve(b) - solve(a) + mod) % mod;ans = (ans + last) % mod;printf("Case #%d: %d\n", cas, ans);}return 0;
}
												

hdu 5435 A serious math problem 数位dp相关推荐

  1. hdu 5435 A serious math problem(数位dp)

    题目链接:hdu 5435 A serious math problem 裸的数位dp. #include <cstdio> #include <cstring> #inclu ...

  2. HDU 4352 XHXJ's LIS(*数位DP 记忆化搜索 待整理)

    XHXJ's LIS HDU - 4352 #define xhxj (Xin Hang senior sister(学姐))  If you do not know xhxj, then caref ...

  3. (HDU - 3709)Balanced Number(数位DP)

    题目链接:Problem - 3709 题意:给定区间[a,b],求区间内平衡数的个数.所谓平衡数即有一位做平衡点,左右两边数字的力矩相等. 分析,这道题我们直接对平衡点进行枚举即可,然后分别求出来每 ...

  4. HDU - 5974 A Simple Math Problem 题解

    D - Simple Math Problem 戳上方进入原题哟~ 题目大意 给一个数 a,b. 让你求满足一下条件的 X,Y: X+Y = a LCM(X,Y) = b 解析 题目给出时间限制1s, ...

  5. UVA - 1640 The Counting Problem (数位dp)

    题意:统计l-r中每种数字出现的次数 很明显的数位dp问题,虽然有更简洁的做法但某人已经习惯了数位dp的风格所以还是选择扬长避短吧(说白了就是菜啊) 从高位向低位走,设状态$(u,lim,ze)$表示 ...

  6. HDU 5598 GTW likes czf(数位dp)

    题意: 给出g,t,l,r≤9×1018,在g,t随机选一个数X与[l,r]区间的数随机选一个Y做X@Y运算 给出g,t, l, r \leq 9\times 10^{18}, 在g,t随机选一个数X ...

  7. HDU 3943 K-th Nya Number(数位DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3943 题目大意:求出区间 (P,Q] 中找到第K个满足条件的数,条件是该数包含X个4和Y个7 Samp ...

  8. HDU 2089:不要62(数位DP)

    问题概述:规定不吉利的数字为所有含有4或62的号码,例如:62315 73418 88914都属于不吉利号码,但如果6和 2不连续就不算,给定一个区间,求出这个区间有多少个数不是不吉利数 (http: ...

  9. HDU 1757 A Simple Math Problem

    Problem Description Lele now is thinking about a simple function f(x). If x < 10 f(x) = x. If x & ...

最新文章

  1. rabbitmq可靠发送的自动重试机制 --转
  2. Swift3.0语言教程字符串与文件的数据转换
  3. ONAP — Overview
  4. oddo docker 安装
  5. 如何将自己的站点与Ucenter整合——详解
  6. javaweb学习总结(十八):JSP属性范围
  7. 真的要做一辈子的程序员吗?来自10年程序员的心声
  8. bootstrap 开源框架demo_5 个接私活必备的 Java 开源项目!
  9. 半年时间能学会php吗_4个月真的能学会PHP吗
  10. LeetCode 404. 左叶子之和思考分析
  11. 2018 Machine Learning
  12. linux 删除分区_详解linux系统架构--文件系统体系
  13. 华为Mate30系列诠释真旗舰:9月26日在国内正式发布
  14. mysql noinstall 5.5_mysqlnoinstall 手动安装
  15. ExpandRegion for Sublime Text:快速选择文本
  16. 索引、分区和分桶的区别
  17. 摩尔斯电码对照表—Morse code
  18. 从Master到百度《最强大脑》人机大战:AI成坊间话题意味着什么?
  19. 工欲善其事必先利其器-SpringBoot源码研究之源码编译
  20. 熵权法stata程序

热门文章

  1. 【学习笔记】群论入门
  2. 2010 年 博文汇总
  3. Web开发实用浏览器(工具)插件
  4. 【图像压缩】香农熵和差分进化算法多级图像阈值图像压缩【含Matlab源码 2035期】
  5. c#设计模式(3)—— 利用观察者模式模拟推送消息
  6. Android6.0运行时权限(危险权限列表)
  7. 诚聘.NET高级软件工程师
  8. 斯凯奇熊猫鞋怎样清洗
  9. [XCTF] [NJUPT CTF 2017] maze
  10. ecshop Strict standards: Only variables should be passed by reference in flashplay.php on line 181