其实这道题目不难,主要要求我们有一个清晰地思路
首先可以按位数讨论,这里我把1~9单独讨论了
因为除了1位数,每个位数开头的数的开头数字1前面都是-号
然后考虑位数的奇偶性
当位数为奇数的时候比较简单
举个例子
-1+0-0
+1-0+1
-1+0-2
+1-0+3
不难发现,奇位数从开头的数开始,相邻两个数数字和都是1,这就非常好统计了
如果位数为偶数,则这位数的一个数排完之后,下一个数的开头符号还是上一个数的开头符号
就是-1+0 -1+1 -1+2……这个意思
于是我们就要数位dp来处理

 var f:array[..,..] of int64;
d,c:array[..] of int64;
ans,x,n:int64;
s,i,m,j,k,t:longint; begin
readln(n);
if n<= then
begin
for i:= to n do
if i mod = then ans:=ans+i else ans:=ans-i;
writeln(ans);
halt;
end;
ans:=;
m:=;
x:=n;
while x<> do
begin
inc(m);
d[m]:=x mod ;
x:=x div ;
end;
c[]:=;
for i:= to m do
c[i]:=c[i-]*;
for i:= to do
f[,i]:=i;
for i:= to m do //开头为j,是i位数的每个数的数字和(注意这里默认每个数的开头都是+)
for j:= to do
begin
f[i,j]:=c[i]*j;
for k:= to do
f[i,j]:=f[i,j]-f[i-,k];
end;
for i:= to m- do //位数小于n的数字和
begin
if i mod = then
begin
for j:= to do
ans:=ans-f[i,j];
end
else ans:=ans+*c[i] div ;
end;
if m mod = then //n位数为奇数可以直接计算
begin
ans:=ans+(n-c[m]+) div ;
if n mod = then
begin
for i:=m downto do
if i mod = then ans:=ans+d[i]
else ans:=ans-d[i];
end;
end
else begin
k:=-;
for i:=m downto do //n位数为偶数逐位统计
begin
if i=m then s:= else s:=;
for j:=s to d[i]- do
ans:=ans+k*f[i,j];
ans:=ans+k*(n-d[i]*c[i]+)*d[i]; //这里要好好琢磨
n:=n-d[i]*c[i];
k:=k*(-);
end;
end;
writeln(ans);
end.

bzoj1236的更多相关文章

随机推荐

  1. linux 下ffmpeg和mencoder安装

    ffmpeg和mencoder是进行视频转换和视频抽帧的重要开源工具,支持linux和windows环境下的视频转换和视频抽帧操作.本文章记录在linux这两者工具的安装过程.ffmpeg集成视频编码 ...

  2. Maven浅析-2 什么是Maven

    1.简单点讲:Maven就是一个项目构建工具.它可以生成一个artifact(component),还可以帮我们管理项目依赖(如附加的组件Filters等). 2.从整体讲:Maven也可以看作一个项 ...

  3. Lucida Grande字体无法正常显示冒号的解决方案

    曾经贪图Mac OSX的UI漂亮,后来查到它用的是Lucida Grande字体,所以索性将win7也改成了那种字体,结果浏览器中的中文冒号全都显示为一个奇怪的符号.后来即使将字体设置回去也无法还原. ...

  4. Handler 原理分析和使用之HandlerThread

    前面已经提到过Handler的原理以及Handler的三种用法.这里做一个非常简单的一个总结: Handler 是跨线程的Message处理.负责把Message推送到MessageQueue和处理. ...

  5. c语言学习之基础知识点介绍(二):格式化控制符和变量的补充

    上节简单介绍了c语言中的一些基础知识点,本节将对之前介绍的不够详细的知识点进行补充. 格式化控制符的消息介绍: %d的其他控制符: 1.%md:m代表这个整数位占用多少位,m是一个整数.实际数字不足的 ...

  6. 关于vs2008使用oracleclient链接oracle数据库报报错OCIEnvCreate 失败,返回代码为 -1,但错误消息文本不可用

    用vs2008链接oracle数据库出现问题,报错OCIEnvCreate 失败,返回代码为 -1,但错误消息文本不可用,从网上找了好久方法,有两种oracle客户端文件权限,和运行vs2008以管理 ...

  7. Flex:CSS3布局利器

    实习以来做了三个小控件,都是用的CSS2.1里传统的DIV+CSS布局方式,综合使用position.margin.float.BFC等属性或特性将元素放到指定的位置上.然而面对日益复杂的界面,这些来 ...

  8. tp接支付宝接口签名不相等解决办法 接口版本3.3 tp版本3.1

    (2)在Core.php和Notify.php文件中添加了去掉TP的URL中的'_URL_'参数的函数.这个是必须的,否则会导致验证失败问题.具体改变为: function paraFilter改为 ...

  9. qrcode.js插件将你的内容转换成二维码格式

    ---qrcode.js插件将你的内容转换成二维码格式--- 我之前一直想知道二维码是怎么生成,所以就了解了一下, 最后还是不知道它的原理, 但是,我知道怎么生成. 现在就让我带你制作一个你喜爱的二维 ...

  10. Yeoman安装

    Yeoman帮助我们创建项目,提供更好的工具来使我们的项目更多样化. Yeoman提供generator系统,一个generator是一个插件,在我们在一个完整的项目上使用‘yo’命令时,会运行该ge ...