其实这道题目不难,主要要求我们有一个清晰地思路
首先可以按位数讨论,这里我把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. Builder 生成器模式

    将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 当同时满足以下情况的时候可以使用Builder模式: 当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式. 当 ...

  2. datebox清除按钮,datebox加上清除按钮,easyui datebox加上清除按钮

    datebox加上清除按钮,easyui datebox加上清除按钮 >>>>>>>>>>>>>>>>& ...

  3. 如何打包成jar包自己看呢?

    第一步:选择你要导出的部分 第二步:

  4. ASP.NET MVC学习系列 WebAPI初探

    转自http://www.cnblogs.com/babycool/p/3922738.html 一.无参数Get请求 一般的get请求我们可以使用jquery提供的$.get() 或者$.ajax( ...

  5. python基础知识七

    我们会使用raw_input和print语句来完成这些功能. 对于输出,也可以使用多种多样的str(字符串)类. 例如使用rjust方法来得到一个按一定宽度右对齐的字符串. 可以通过创建一个file类 ...

  6. Android - 折线图

    使用Android的canvas,画折线图:代码为: package spt.view; import android.annotation.SuppressLint; import android. ...

  7. 如何快速的将Centos6.7快速升级3.10.9

    参考文档:http://www.xiexianbin.cn/linux/2015/10/15/quickly-upgrade-centos6.5-kernel-from-2.6.32-to-3.10. ...

  8. jQuery 杂项方法

    jQuery 杂项方法 方法 描述 data() 向被选元素附加数据,或者从被选元素获取数据 each() 为每个匹配元素执行函数 get() 获取由选择器指定的 DOM 元素 index() 从匹配 ...

  9. Python:对象

    #!/usr/bin/python3 #对象实例 class Person: num=200 def __init__(self,name,sex): self.name=name self.sex= ...

  10. DateTimePicker时间控件:

    DateTimePicker时间控件: http://xdsoft.net/jqplugins/datetimepicker/ 可以参考文档设置各种属性,格式. 用法: 首先下载datetimepic ...