其实这道题目不难,主要要求我们有一个清晰地思路
首先可以按位数讨论,这里我把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. java web 中的转发和重定向

    假设应用程序的 contextPath 为 /ctx,在 http://localhost:8080/ctx/a/b 资源中,我们转发和重定向到 http://localhost:8080/ctx/x ...

  2. 源码心德`Context`类

    Context,中文直译为“上下文”,SDK中对其说明如下: Interface to global information about an application environment. Thi ...

  3. C# - linq查询现有的DataTable

    可以通过linq对现有的DataTable进行查询,并将结果拷贝至新的DataTable中例如: // Query the SalesOrderHeader table for orders plac ...

  4. cocos2d-x Android 环境搭建问题汇总

    初次接触Cocos2d-x,准备搭建一个hello world的Android环境,问题遇到很多.在此记录,为自己,也为大家,避免重走弯路! 具体的环境搭建,可以参考官方的文档.在Windows7平台 ...

  5. Java学习----字符串函数

    1.String string类是最终类,不可以有子类 package com.demo.pkg1; public class TestString { public static void main ...

  6. Centos 6.5 RedHat 6 安装mysql

    所需文件列表, 这些文件在安装光盘内的Packages文件夹内, 也可以到MySQL官方网站下载其他版本(需要FQ). 将这些文件放在/usr/loca/src文件夹: -.el6.x86_64.rp ...

  7. 网站开发常用jQuery插件总结(四)验证插件validation

    在网站开发过程中,有时我们需要验证用户输入的信息是否符合我们的要求,所以我们会对用户提交的数据进行验证.验证分两次进行,一次是在客户端,一次是在服务端.客户端的验证可以提升用户的体验. jquery验 ...

  8. 浅谈ListBox控件,将对象封装在listBox中,在ListBox中显示对象中某个属性,在ListBox中移除和移动信息

    大家好,俗称万事开头难,不经历风雨,怎能见彩虹.在此小编给大家带来一个自己练习的小实例,希望与大家一起分享与交流.下面进入应用场景,从SQL2008数据库取出数据,给ListBox赋值在界面并显示出来 ...

  9. strtotime 的几点不同

    在php里面,strtotime()有点比较特殊,date函数也有点问题 if ( date(1,time()) == "Monday")    //似乎 date(1,time( ...

  10. centos7 systemctl grub2

    centos最小好化安装没有ifconfig命令 刚安装了centos7.0,最小化安装,发现没有ifconfig命令,虚拟机里面的网卡显示ens32,这是centos7.0的特点,要使用 ifcon ...