HDU4722——Good Numbers——2013 ACM/ICPC Asia Regional Online —— Warmup2
今天比赛做得一个数位dp。
首先声明这个题目在数位dp中间绝对是赤裸裸的水题。毫无技巧可言。
题目的意思是个你a和b,要求出在a和b中间有多少个数满足数位上各个数字的和为10的倍数。
显然定义一个二维数组f,f[i][j]表示i位任意的数组合所有数位对10取模后余数为j的种类。
这样直接枚举1-10就可以得出i和i+1的递推关系了呢。简单了吧。
在求答案的时候不是直接求的,用的是数位dp最最经典的答案求法:
那就是定义一个count(x)函数表示不大于x满足的个数,这样,所求的答案就等于count(b)-count(a)了
下面的问题就是如何求得count这个函数值了。
首先我们把数x进行分解,用数组中的一个元素表示x的相对位数的数字。
这样对于从低位开始数起的第i位,如果数位的数值为a[i],那么我们可以任取0~a[i]-1(想想为什么?这是典型的数位dp的求法),同时保存前面的和并且把a[i]加到和中并取模。
这样如此下去直到求出所有的,同时就是等于x本身的数没有考虑,我们可以直接特判一下就OK了。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#define ll long long
using namespace std; ll f[][],sum[],t,A,B,n,a[],ans,tep; ll count(ll x)
{
if (x<) return;
if (x<) return;
n=ans=tep=;
while (x) a[++n]=x%,x/=;
for (ll i=n; i>; i--)
{
for (ll k=; k<a[i]; k++)
ans+=f[i-][(-(tep+k)%)%];
tep=(tep+a[i])%;
}
for (ll i=; i<=a[]; i++)
if ((i+tep)%==) ans++;
return ans;
} int main()
{
memset(f,,sizeof f);
for (ll i=; i<=; i++) f[][i]=;
for (ll i=; i<=; i++)
{
for (ll j=; j<; j++)
for (ll k=; k<; k++)
f[i+][(j+k)%]+=f[i][j];
}
/*for (int i=1; i<=3; i++)
{
for (int j=0; j<=10; j++) cout<<f[i][j]<<' '; cout<<endl;
}*/
for (ll i=; i<=; i++) sum[i]=f[i][];
cin>>t;
for (ll cas=; cas<=t; cas++)
{
cin>>A>>B;
if (A>B)
{
cout<<"Case #"<<cas<<": "<<<<endl;
continue;
}
/*ll tep=count(B);
cout<<"counting B is: "<<tep<<endl;*/
cout<<"Case #"<<cas<<": "<<count(B)-count(A-)<<endl;
}
return;
} 代码写得十分之挫,而且又很多调试的语句都没有删掉,望谅解。
本人在此最想说的是,dp并不是本题最优解法。
想想对于0-9果断至少有一个加上前面的和是10的倍数。
然后顺着想下去就会发现是如此有趣的规律。我还没想过,但是猜着大概就是这样。
陈兴老师也说了不要用数位dp呢。
呵呵,打个表就知道内在规律,以及解法呢。
HDU4722——Good Numbers——2013 ACM/ICPC Asia Regional Online —— Warmup2的更多相关文章
- HDU 4722 Good Numbers(位数DP)(2013 ACM/ICPC Asia Regional Online ―― Warmup2)
Description If we sum up every digit of a number and the result can be exactly divided by 10, we say ...
- 2013 ACM/ICPC Asia Regional Online —— Warmup2 ABEGKL
HDU4716 A. A Computer Graphics Problem A题目描述 题意:输出手机剩余电量,保证给出的数是10的倍数. 题解:水题,按题意输出即可. 代码: #include & ...
- 2013 ACM/ICPC Asia Regional Online —— Warmup2
HDU 4716 A Computer Graphics Problem 水题.略 HDU 4717 The Moving Points 题目:给出n个点的起始位置以及速度矢量,问任意一个时刻使得最远 ...
- HDU 4717 The Moving Points(三分法)(2013 ACM/ICPC Asia Regional Online ―― Warmup2)
Description There are N points in total. Every point moves in certain direction and certain speed. W ...
- HDU 4719 Oh My Holy FFF(DP+线段树)(2013 ACM/ICPC Asia Regional Online ―― Warmup2)
Description N soldiers from the famous "*FFF* army" is standing in a line, from left to ri ...
- HDU 4725 The Shortest Path in Nya Graph(最短路径)(2013 ACM/ICPC Asia Regional Online ―― Warmup2)
Description This is a very easy problem, your task is just calculate el camino mas corto en un grafi ...
- HDU4726——Kia's Calculation——2013 ACM/ICPC Asia Regional Online —— Warmup2
题目的意思是给你两个数字(多达10^6位) 做加法,但是有一点,没有进位(进位不算,相当于这一位相加后对10取模) 你可以任意排列两个数字中的每一位,但是不能是0开头. 现在题目要求以这种不进位的算法 ...
- hduoj 4710 Balls Rearrangement 2013 ACM/ICPC Asia Regional Online —— Warmup
http://acm.hdu.edu.cn/showproblem.php?pid=4710 Balls Rearrangement Time Limit: 6000/3000 MS (Java/Ot ...
- hduoj 4708 Rotation Lock Puzzle 2013 ACM/ICPC Asia Regional Online —— Warmup
http://acm.hdu.edu.cn/showproblem.php?pid=4708 Rotation Lock Puzzle Time Limit: 2000/1000 MS (Java/O ...
随机推荐
- 亿级PV请求的三种负载均衡技术
在互联网+不断渗透到生活中的今天,各种各样的网络服务存在在我们身边,他们的访问流量也是大得惊人.一个大型网站(百万PV以上)想要正常访问,单单靠一台服务器是不可能提供稳定服务的.这时候就需要用负载均衡 ...
- 初探JSP运行机制和与Servlet间的关系
自己看的书,手动画的图,如果有错误,请指正,谢谢.
- SpringBoot日记——Cache缓存篇
通常我们访问数据的情况如下图,数据存缓存就取缓存,不存缓存就取数据库,这样可以提升效率,不用一直读取数据库的信息: 开始记录: 关于SpringBoot缓存的应用 1. 首先在pom.xml文件中添加 ...
- 【10.13】Bug Bounty Write-up 总结
今天惯例邮箱收到了Twitter的邮件提醒有新的post,这种邮件每天都能收到几封,正好看到一个Bug Bounty的write up,比较感兴趣,看起来也在我的理解范围之内,这里对这篇write u ...
- 曾经的华为C面试题,一点就通
学习编程可以锻炼你的思维,帮助你更好地思考,创建一种我认为在各领域都非常有用的思维方式. 比尔盖茨 曾经的华为C面试题,一点就通 [问题区] 有两个变量x和y, x=10; y = 2 ...
- Vue Cli 中使用 Karma / Chrome 执行样式相关单元测试
在 GearCase 开源项目 中,我使用了 Vue Cli 的默认测试框架.因此和样式相关的东西,都无法进行测试.因为它并不类似于无头浏览器,而是存在于虚拟内存之中. 现状 在如下 button.s ...
- 关于几个与IO相关的重要概念
1.读/写IO 读IO就是发指令从磁盘读取某段序号连续的扇区内容.指令一般是通知磁盘开始扇区位置,然后给出需要从这个初始扇区往后读取的连续扇区个数,同时给出动作是读还是写.磁盘收到这条指令就会按照指令 ...
- "api-ms-win-crt-runtime-l1-1-0.dll 丢失"怎么办?详细解决步骤
api-ms-win-crt-runtime-l1-1-0.dll 丢失 电脑找不到api-ms-win-crt-runtime-l1-1-0.dll文件解决方法: 问题描述: 1.开机提示" ...
- kafka consumer demo
kafka消费者demo pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmln ...
- SecureCRT SSH连接一直提示密码错误
这是解决方法: http://www.linuxidc.com/Linux/2016-09/134925.htm