其实这道题目不难,主要要求我们有一个清晰地思路
首先可以按位数讨论,这里我把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. 借用网上大神的一些知识,html5 video 视频播放都兼容(Android,iOS,电脑)

    <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head>    < ...

  2. tp集成支付宝担保支付

    现在的网站功能越来越全乎了,很多网站都需要做支付功能,而且很多大平台都提供了各式各样的api来扩充自己的用户和开发者.话说,这种使用大平台的api来做支付,无论是从成本上还是从开发效率上都是很好的选择 ...

  3. 浅谈.net中的params关键字

    先举个例子: 代码如下: class Program { static void Main(string[] args) { Console.WriteLine(Sum(1)); Console.Wr ...

  4. 收集SQLServer线程等待信息

    要知道线程等待时间是制约SQL Server效率的重要原因,这一个随笔中将学习怎样收集SQL Server中的线程等待时间,类型等信息,这些信息是进行数据库优化的依据. sys.dm_os_wait_ ...

  5. 'EntityValidationErrors' property for more details

    很多小猿遇到这个Exception 的时候,都会有点无厘头.这个时候最好try-- catch下,找到出错的地方.本人习惯在页面上加个lable标签,把exc msg(exception messag ...

  6. AngularJS 路由:ui-router

    UI-Router是Angular-UI提供的客户端路由框架,它解决了原生的ng-route的很多不足:视图不能嵌套.这意味着$scope会发生不必要的重新载入.这也是我们在Onboard中引入ui- ...

  7. 【实习记】2014-08-24实习生无法映射磁盘替代方案rsync+非默认端口22设置

    正职开发人员有两个电脑,一个办公网的,一个开发网的.通过samba服务在开发网机器上映射编译环境机的磁盘没有问题. 开发岗实习生使用虚拟机做跳板方式登录编译环境机.上面的方法不能用. 替代方法:rsy ...

  8. jquery 三种开始写法

    在 jquery 代码中使用 $(document).ready()时,位于其中的所有代码都会在 DOM 加载后立即执行 第一种(推荐)$(document).ready(function(){   ...

  9. 利用青瓷布局自定义加载的场景,而不是自己改写qici-loading

    加载界面如果全部通过自己手动布局不仅不美观,还很难控制.借用原生的场景切换加载效果,来实现我们游戏的加载效果. 没有做加载修改的原来的加载顺序:   黑乎乎界面->(游戏定制的加载)你的第一个场 ...

  10. [我的疑问]String? = "Skiy Chan" 中的问号是什么意思?

    var optionalName : String? = "Skiy Chan" String? = "Skiy Chan" 中的问号是什么意思?目前还在看ap ...