hdu 5435 A serious math problem
A serious math problem
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Problem Description
Xiao Jun likes math and he has a serious math question for you to finish.
Define \(F[x]\) to the \(xor\) sum of all digits of \(x\) under the decimal system,for example \(F(1234) = 1\ xor\ 2\ xor\ 3\ xor\ 4 = 4\).
Two numbers \(a,b(a≤b)\) are given,figure out the answer of \(F[a] + F[a+1] + F[a+2]+…+ F[b−2] + F[b−1] + F[b]\) doing a modulo \(10^9+7\).
Input
The first line of the input is a single integer \(T(T<26)\), indicating the number of testcases.
Then \(T\) testcases follow.In each testcase print three lines :
The first line contains one integers \(a\).
The second line contains one integers \(b\).
\(1≤|a|,|b|≤100001\),\(|a|\) means the length of \(a\).
Output
For each test case, output one line "Case #x: y", where x is the case number (starting from 1) and y is the answer.
Sample Input
4
0
1
2
2
1
10
9999
99999
Sample Output
Case #1: 1
Case #2: 2
Case #3: 46
Case #4: 649032
Source
BestCoder Round #55 ($)
这就是数位dp。。。。又想起了当年我作为一个被毒害的小朋友去写windy数的恐惧(哪天再去做一遍233)
我们来简单说一下这道题的做法:
\(dp[i][j]\) 表示\(i\)位数,异或值为\(j\)的数的个数。\((e.g.\ 0-9\ 10 - 99\ 100 - 999\ ......)\)
表示这个转移很暴力~~(代码展示---)
然而数位dp和别的不同的是,dp其实只是你的预处理。。。。你可能还要计数。。。(蒟蒻表示计数比dp难)
需要我们做的操作是求出所有小于等于\(a\)的自然数的异或值的和。而我们预处理的是很多个区间的答案,所以我们还要统计一下。
我们需要把\(a\)这个数给拆成很多个区间。。。
举个栗子:
\(3122=(0~999)+(1000~1999) + (2000~2999) + (3000 ~ 3589)\)
\((3000~3122)=(3000~3099)+(3100~3122)\)
\((3100~3122)=(3100~3109) + (3110~3119) + (3120~3122)\)
按这种方法分解以后,我们就和计数啦~
(注意:代码中可以看出,我们传进去是\(a\),实际上返回的是\(a-1\)的答案,所以适当调整一下~)
#include<bits/stdc++.h>
using namespace std;
const int maxn = 100005, mod = 1e9 + 7;
char a[maxn], b[maxn];
int dp[maxn][20], ans[20];
int cas, last, qwe;
inline void prepare()
{
dp[0][0] = 1;
for(int i = 0; i <= 9; ++i) dp[1][i] = 1;
for(int i = 2; i < maxn; ++i)
for(int j = 0; j < 10; ++j)
for(int k = 0; k <= 15; ++k)
dp[i][j ^ k] += dp[i - 1][k], dp[i][j ^ k] %= mod;
}
inline int workk(char * str)
{
int len = strlen(str + 1); int pre = 0; int ret = 0;
memset(ans, 0, sizeof(ans));
for(int i = 1; i <= len; ++i)
{
int num = str[i] - '0';
for(int j = 0; j < num; ++j)
{
for(int k = 0; k <= 15; ++k)
{
ans[pre ^ j ^ k] += dp[len - i][k];
ans[pre ^ j ^ k] %= mod;
}
}
pre ^= num;
}
for(int i = 1; i <= 15; ++i) ret = (ret + (long long)i * ans[i]) % mod;
return ret;
}
int main()
{
prepare();
int t; scanf("%d", &t);
while(t--)
{
cas++; qwe = 0; last = 0;
scanf("%s", a + 1); scanf("%s", b + 1); int p = strlen(b + 1);
for (int i = 1; i <= p; i++) last ^= (b[i] - '0');
qwe = (workk(b) - workk(a) + mod) % mod;
qwe = (qwe + last) % mod;
printf("Case #%d: %d\n", cas, qwe);
}
return 0;
}
hdu 5435 A serious math problem的更多相关文章
- HDU 5055 Bob and math problem(结构体)
主题链接:http://acm.hdu.edu.cn/showproblem.php?pid=5055 Problem Description Recently, Bob has been think ...
- HDU 1757 A Simple Math Problem 【矩阵经典7 构造矩阵递推式】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=1757 A Simple Math Problem Time Limit: 3000/1000 MS (J ...
- hdu 1757 A Simple Math Problem (乘法矩阵)
A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- HDU 5615 Jam's math problem
Jam's math problem Problem Description Jam has a math problem. He just learned factorization.He is t ...
- HDU 1757 A Simple Math Problem (矩阵快速幂)
题目 A Simple Math Problem 解析 矩阵快速幂模板题 构造矩阵 \[\begin{bmatrix}a_0&a_1&a_2&a_3&a_4&a ...
- HDU 1757 A Simple Math Problem(矩阵)
A Simple Math Problem [题目链接]A Simple Math Problem [题目类型]矩阵快速幂 &题解: 这是一个模板题,也算是入门了吧. 推荐一个博客:点这里 跟 ...
- HDU 1757 A Simple Math Problem (矩阵乘法)
A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- hdu 5974 A Simple Math Problem
A Simple Math Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Ot ...
- HDU 1757 A Simple Math Problem(矩阵高速幂)
题目地址:HDU 1757 最终会构造矩阵了.事实上也不难,仅仅怪自己笨..= =! f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + -- + a9 ...
随机推荐
- 解决WordPress设置错误的url网站不能访问
由于设置了未备案的域名,而导致网站访问不了了.同时WordPress是使用docker搭建部署的 docker ps #查看 docker 容器 CONTAINER ID IMAGE COMMAND ...
- 让centos使用ubuntu的make命令补全功能
一直习惯使用debian.ubuntu做开发机,最近it要求各种安全加固,且只提供centos自动化脚本,而ubuntu版本比较乱,14.16.17都要自己整一遍太麻烦,索性换装centos7. 换了 ...
- vue,一路走来(1)--构建vue项目
2016年12月--2017年5月,接触前端框架vue,一路走来,觉得有必要把遇到的问题记录下来. 那时,vux用的是1.0的vue,然而vue2.0已经出来了,于是我结合了mint-ui一起来做项目 ...
- Django组件——Cookie与session相关
一,会话跟踪技术 1 什么是会话跟踪技术我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而1 ...
- python常用函数 E
endswith(str/tuple) 末尾元素匹配,可以传入tuple. 例子: enumerate(iterable) 可以跟踪集合元素索引,适用于迭代器. 例子: eval(str) 可以字符串 ...
- Minor GC与Full GC分别在什么时候发生?
Minor GC 当Eden区没有足够空间进行分配时,虚拟机就会进行一次Minor GC 新生代的垃圾收集动作,采用的是复制算法 对于较大的对象,在Minor GC的时候可以直接进入老年代 Full ...
- Go's Declaration Syntax
Introduction Newcomers to Go wonder why the declaration syntax is different from the tradition estab ...
- html5 自制播放器
代码实例: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- 前端每日实战:65# 视频演示如何用纯 CSS 创作一个摇摇晃晃的 loader
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览.https://codepen.io/comehope/pen/oyJvpe 可交互视频 此视频是可以 ...
- 【leetcode】1019. Next Greater Node In Linked List
题目如下: We are given a linked list with head as the first node. Let's number the nodes in the list: n ...