其实这道题目不难,主要要求我们有一个清晰地思路
首先可以按位数讨论,这里我把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. php字符串函数(1)

    下面去学习一下php的字符串函数,那么怎么去看手册呢,举个例子 int strcasecmp ( string $str1 , string $str2 ) 第一个int,表示此函数返回的类型是int ...

  2. PHP ajax实现数组返回

    首先,我想要实这样一个功能, 当选择一个下拉框时,让其它三个文本框得到从服务器上返回的值!也就把返回的值,赋给那三个文本框! 我用的是jquery+php!! 由于我前台,后台,js,数据库采用的都是 ...

  3. mvc性能优化

    mvc性能优化 (1)移动设备卡顿问题 -1请求方式 在mvc中GET请求有问题,出现错误 在MVC中在进行GET请求获取JSON数据时,需要进行如下设置: return Json("&qu ...

  4. Android - 折线图

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

  5. Winform获取应用程序的当前路径

    //获取当前进程的完整路径,包含文件名(进程名). string str = this.GetType().Assembly.Location; result: X:\xxx\xxx\xxx.exe ...

  6. 查看当前使用的shell

    1.实时查看当前进程中使用的shell种类:推荐 ps | grep $$ | awk '{print $4}' (注:$$表示shell的进程号) 2.最常用的查看shell的命令,但不能实时反映当 ...

  7. 安装cocoaPod 的问题

    APPLEdeiMac:cocoapod案例 apple$ pod install Analyzing dependencies [!] The dependency `Reachability (~ ...

  8. Javascript中bind()方法的使用与实现

    对于bind,我愣了下,这个方法常用在jquery中,用于为被选元素添加一个或多个事件处理程序. 查了下手册,发现bind的作用和apply,call类似都是改变函数的execute context, ...

  9. 视频处理简单实例 [OpenCV 笔记2]

    VideoCapture是OpenCV 2.X中新增的类,提供从摄像机或视频文件捕获视频的C++接口.利用它读入视频的方法一般有两种: // method 1 VideoCapture capture ...

  10. linux安装git方法(转)

    转自:http://jingyan.baidu.com/article/e9fb46e16698687521f766ec.html 以下内容亲测,确实可行. 由于我的机器是linux6.7,所以省略了 ...