BZOJ 1236: SPOJ1433 KPSUM
Description
用+-号连接1-n所有数字的数位,问结果是多少.
Sol
数位DP.
\(f[i][j][0/1][0/1]\) 表示长度为 \(i\) 的数字,开头数字是 \(j\) ,是否有前导0(这个会影响符号),每相邻两组数符号是否相同.
转移开一下代码吧.
这道题的符号有点乱,所以转移看起来有些乱...其实只有3个状态,没前导0,有前导0相邻两个数符号相同,有前导0相邻两个数符号不同.
没前导0的只有在第一次统计才会用到.
我发现自己写数位DP就是写小于 \(n\) 的,所有都需要将 \(n+1\) 计算...
一开始自己神tm的取了模...
Code
/**************************************************************
Problem: 1236
User: BeiYu
Language: C++
Result: Accepted
Time:0 ms
Memory:1308 kb
****************************************************************/ #include <cstdio>
#include <iostream>
using namespace std; #define debug(a) cout<<#a<<"="<<a<<" " typedef long long LL;
const int N = 25; LL n;
LL f[N][N][2][2];// i,j 0/1 qiandao0 0/1 fuhao
LL pow10[N]; void init() {
pow10[0]=1;
for(int i=1;i<=18;i++) pow10[i]=pow10[i-1]*10;
for(int j=0;j<10;j++) {
f[1][j][0][0]=f[1][j-1][0][0]+(j&1 ? 1 : -1)*j;
f[1][j][1][0]=f[1][j][0][0];
f[1][j][1][1]=f[1][j-1][1][1]-j;
}
for(int i=2;i<=18;i++) {
f[i][0][0][0]=f[i-1][9][0][0];
f[i][0][1][0]=-f[i-1][9][1][0];
f[i][0][1][1]=-f[i-1][9][1][1];
for(int j=1;j<10;j++) {
f[i][j][0][0]=f[i][j-1][0][0]-f[i-1][9][1][!(i&1)]-(!(i&1))*j*pow10[i-1];
f[i][j][1][0]=f[i][j-1][1][0]-f[i-1][9][1][0];
f[i][j][1][1]=f[i][j-1][1][1]-f[i-1][9][1][1]-j*pow10[i-1];
}
} /* for(int i=1;i<=3;i++) {
for(int j=0;j<10;j++) {
cout<<i<<" "<<j<<":\n";
for(int p=0;p<2;p++) for(int q=0;q<2;q++) debug(f[i][j][p][q]);
cout<<endl;
}
}*/
}
LL calc(LL x) {
LL g=0,r=0,v=0;
for(int i=18;i;i--) {
if(x/pow10[i-1]) {
if(!g) {
r+=f[i][x/pow10[i-1]-1][0][0];
g=i;
}else {
r+=f[i][x/pow10[i-1]-1][1][!(g&1)]*((g-i)&1 ? -1 : 1);
}
if(g&1){
if((x%pow10[i-1])&1) r+=x/pow10[i-1]*((g-i)&1 ? 1 : -1);
}else {
r+=x/pow10[i-1]*(x%pow10[i-1])*((g-i)&1 ? 1 : -1);
}
}x%=pow10[i-1];
}return r;
}
int main() {
init();
cin>>n;
cout<<calc(n+1)<<endl;
// while(cin>>n) cout<<calc(n+1)<<endl;
return 0;
}
BZOJ 1236: SPOJ1433 KPSUM的更多相关文章
- 【数位统计】之【spoj1433 KPSUM】
[spoj1433]KPSUM 来源 高逸涵<数位计数问题解法研究> 由于自己的数位计数类的问题实在太差了,所以把例2用markdown抄写并补充了一遍. 题意 将写在纸上,然后在相邻的数 ...
- bzoj 1236: longpo的回文
1236: longpo的回文 题目描述 一个字符串如果从左到右和从右到左读的结果是一样的,我们称之为回文串.现在给定一个字符串,我们有三种操作: 1. 添加一个字母在任何位置(可以在首尾添加 ...
- spoj1433 KPSUM
题意:略: 首先知道10,20,......100,200,1000的前面的符号都是负号. 举具体例子:221时,计算过程为 000-009, 010-019, 020-029...... ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 【BZOJ】【1269】【AHOI2006】文本编辑器editor
Splay Splay序列维护的模板题了……为了便于处理边界情况,我们可以先插入两个空格当作最左端和最右端,然后……其实本题主要考察的就是Build.splay和Findkth这三个操作,我们可以实现 ...
- 【BZOJ】【2179】FFT快速傅里叶
FFT 做的第二道用到FFT的……好吧其实还是模板题-_-b 百度上说好像分治也能做……不过像FFT这种敲模板的还是省事=.= /*********************************** ...
- BZOJ 2127: happiness [最小割]
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ...
- BZOJ 3275: Number
3275: Number Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 874 Solved: 371[Submit][Status][Discus ...
- BZOJ 2879: [Noi2012]美食节
2879: [Noi2012]美食节 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1834 Solved: 969[Submit][Status] ...
随机推荐
- [LeetCode] Nested List Weight Sum 嵌套链表权重和
Given a nested list of integers, return the sum of all integers in the list weighted by their depth. ...
- 委托,匿名函数和lambda表达式
很早之前就接触到了委托,但是一直对他用的不是太多,主要是本人是菜鸟,能写的比较高级的代码确实不多,但是最近在看MSDN微软的类库的时候,发现了微软的类库好多都用到了委托,于是决定好好的研究研究,加深一 ...
- EventBus使用
转自 http://blog.csdn.net/harvic880925/article/details/40660137
- [转]CSS如何设置html table表格边框样式
原文地址:http://www.divcss5.com/wenji/w503.shtml 对table设置css样式边框,分为几种情况: 1.只对table设置边框 2.对td设置边框 3.对tabl ...
- AC自动机 HDU 2896
n个字串 m个母串 字串在母串中出现几次 #include<stdio.h> #include<algorithm> #include<string.h> #inc ...
- 2016福州大学软件工程第三次个人作业-K米软件产品评测
K米软件测评个人作业结果统计如下: 评分标准: 按照栋哥布置的第三次个人作业--K米测评制定评分标准如下: 第一部分:调研.评测 下载并使用,描述最简单直观的个人第一次上手体验. 0.5 按照描述的b ...
- PowerShell自动部署IIS站点(Windows Server 2008 R2)
1.功能描述 1. 连接软件源服务器下载.NET Framework 4.0..NET Framework 4.5. 2. 检测并判断当前.NET Framework版本是否小于v4.0,如果小于则进 ...
- noip2012 开车旅行
此题100分的解法就是先预处理出每个点的下一个点之后倍增就好了.其实并没有太大难度. pbihao用双向链表写过了此题.在本地上我treap狂操他,but在rqnoj上,我依靠反复提交才A掉此题(最后 ...
- Think twice before doing~
1.遇到任何矛盾,对事不对人. 2.接到朋友等人的求助电话后,一定要先问清楚对方有什么事情,然后再告诉他(她)能不能帮她(他). 3.如果没有十足的把握和必要,就不要轻易说假话. 4.少提自己的私事, ...
- Python Day14
HTML HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他,这样就可以让浏 ...