今天做的比赛,和队友都有轻微被虐的赶脚。

诶,我做的题就是这个题目了。

题目描述就是对于一个十进制数数位上的每一位当做一个二进制位来求出这个数,这个定义为G(x)。

题目给定你A和B,求在0-B范围内有多少个数x满足G(x)<=G(A)。

这个题目显然是个数位DP哦。可惜我在比赛的时候琢磨了好久才弄出来,诶,深坑队友啊。

这个题目给定的时间比较紧,只有500ms,但是数据也不强,只有10^9。

其实最最重要的优化(也是dp的一部分)就是预处理数组f[i][j](表示i位数构成的值的G函数值为j的种类数)

这样很显然很容易可以得到f[i]和f[i+1]的递推关系呢。

同时由于给定的范围只有10^9,所以对于i,我们只要处理到8就可以咯。你懂的。

同时我们可以先算一下,最大的那个数99999999(8个9)所对应的G函数的值(我算好像不过万吧)这样复杂度完全可以闭着眼睛承受。

于是在求的时候也是用的最最经典的数位DP的求法,这里就不详细说了,新手多刷几个水题就弄明白了。

其实这个题目最最关键的就是我刚刚说的这个预处理,但是这个预处理还是不够的,还要预处理f[i][j]的前缀和。

我们可以用sum[i][j]表示f[i][0]~f[i][j]的和,因为每次我们dp的时候要加的是那个和,所以有了这个预处理我们可以直接调用咯,还不怕数据大,每次都是一样的。

下面上我的代码吧,比赛的时候写的,代码有点乱,希望神犇不要喷我……

#include <iostream>
#include <cstring>
#define ll long long
#define maxn 10000
using namespace std; ll a[],b[],c[],A,B,t,na,nb,f[][maxn],ans,sum[][maxn],cas=; int main()
{
for (ll i=; i<; i++) c[i]=(<<i);
memset(f,,sizeof f);
memset(sum,,sizeof sum);
for (ll i=; i<; i++) f[][i]=;
for (ll i=; i<=; i++)
{
for (ll k=; k<maxn; k++)
{
if (f[i-][k]==) continue;
for (ll j=; j<; j++)
f[i][k+j*c[i-]]+=f[i-][k];
}
}
/*for (ll i=1; i<=5; i++)
{
for (ll j=0; j<=5; j++) cout<<f[i][j]<<' '; cout<<endl;
}*/
for (ll i=; i<=; i++)
{
sum[i][]=;
for (ll j=; j<maxn; j++) sum[i][j]=sum[i][j-]+f[i][j];
}
/*cout<<endl;
for (ll i=1; i<=5; i++)
{
for (ll j=0; j<=5; j++) cout<<sum[i][j]<<' '; cout<<endl;
}*/
cin>>t;
while (t--)
{
cin>>A>>B;
ans=na=nb=;
memset(a,,sizeof a);
memset(b,,sizeof b);
while (A) a[++na]=A%,A/=;
while (B) b[++nb]=B%,B/=;
for (ll i=; i<na; i++) a[i+]+=a[i]/,a[i]%=;
while (a[na]>) a[na+]=a[na]/,a[na]%=,na++;
/*for (ll i=na; i>0; i--) cout<<a[i]; cout<<endl;
for (ll i=nb; i>0; i--) cout<<b[i]; cout<<endl;*/
A=;
for (ll i=; i<=na; i++) A+=a[i]*c[i-];
for (ll i=nb; i>; i--)
{
for (ll j=; j<b[i]; j++)
if (A-j*c[i-]>=) ans+=sum[i-][A-j*c[i-]];
else break;
A-=b[i]*c[i-];
if (A<) break;
}
for (ll i=; i<=b[]; i++)
if (A>=i) ans++;
cout<<"Case #"<<++cas<<": "<<ans<<endl;
}
return;
}

HDU4734——2013 ACM/ICPC Asia Regional Chengdu Online的更多相关文章

  1. 2013 ACM/ICPC Asia Regional Chengdu Online 1004 Minimum palindrome

    Minimum palindrome Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  2. 2013 ACM/ICPC Asia Regional Chengdu Online---1003

    哈哈哈 #include <iostream> #include <cstring> #include <string> #include <cstdio&g ...

  3. 2013 ACM/ICPC Asia Regional Chengdu Online hdu4731 Minimum palindrome

    Minimum palindrome Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  4. HDU 4729 An Easy Problem for Elfness(主席树)(2013 ACM/ICPC Asia Regional Chengdu Online)

    Problem Description Pfctgeorge is totally a tall rich and handsome guy. He plans to build a huge wat ...

  5. HDU 4735 Little Wish~ lyrical step~(DLX搜索)(2013 ACM/ICPC Asia Regional Chengdu Online)

    Description N children are living in a tree with exactly N nodes, on each node there lies either a b ...

  6. 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 ...

  7. 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 ...

  8. hduoj 4715 Difference Between Primes 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4715 Difference Between Primes Time Limit: 2000/1000 MS (J ...

  9. hduoj 4712 Hamming Distance 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4712 Hamming Distance Time Limit: 6000/3000 MS (Java/Other ...

随机推荐

  1. Android Studio: Could not download junit.jar (junit:junit:4.12)

    下载了Android Studio 3.1.4,新建一个项目,选择Activity,结果gradle提示 Unable to resolve dependency for ':app@debugAnd ...

  2. html5新特性data_*自定义属性使用

    HTML5规范里增加了一个自定义data属性. 这个自定义data属性的用法非常的简单, 就是你可以往HTML标签上添加任意以 "data-"开头的属性, 这些属性页面上是不显示的 ...

  3. JetBrains全家桶使用攻略

    JetBrains全家桶使用攻略 今天狠狠心某宝买了一个key,可以使用15款开发软件,在此进行记录. 全家桶链接:https://www.jetbrains.com/products.html?fr ...

  4. 【译】Serverless架构 - 3

    原文: https://martinfowler.com/articles/serverless.html 消息驱动型应用 后台数据处理服务是一个不同的例子. 你要写一个需要快速响应UI请求的以用户为 ...

  5. 分享一个DataTable转List强类型的类库

    类库扩展自Datatable,可以直接用Datatable.ToList<T>()进行转换.为了方便把DataReader装入Datatable,开扩展了一个LoadForReader(t ...

  6. 开发人员常用的DOS命令

    1.远程连接:mstsc /admin 2.开启服务:services.msc 3.打开注册表:regedit 4.IIS服务器重启:iisreset 5.打开记事本:notepad 6.查看系统信息 ...

  7. Python对中文的支持

    在Python中,经常会出现中文,出现中文有时候会报错,这时候很多新手在处理中文编码的时候会有点不知所措. Python主要有2.x和3.x版本两个区别,在3.x版本中,已经支持中文直接开发,而不需要 ...

  8. 《杜增强讲Unity之Tanks坦克大战》2-场景设置

    2  场景设置 2.1 本节效果预览   2.2 项目目录设置 点击Project面板的Create按钮,在根目录下面新建wm文件夹   Wm文件夹用于存放我们自己生成的Prefab和脚本等其他资源, ...

  9. 自动分配ip的方法- 【Linux】

    1.  查看本机无线网络使用的网卡 2.  设置vbox的网络连接为桥接,并选择本机无线网络对应的网卡 3.  进入系统,输入ifconfig命令,记录下系统的HWaddr 4.  修改系统ip配置文 ...

  10. git 创建管理多用户

    <搬运> Windows下Git多账号配置,同一电脑多个ssh-key的管理 一台电脑上的git同时使用两个github账户 git之https或http方式设置记住用户名和密码的方法