4230: 倒计时

Time Limit: 10 Sec  Memory Limit: 256 MB
Submit: 20  Solved: 12
[Submit][Status][Discuss]

Description

这是一个特别的倒计时方法。
具体来说,一开始你有一个非负整数n。
每一次操作,你可以从当前的数上减去当前的数某个数位上的数值。当当前数变成0时,倒计时结束。
大概没什么人会对这样不便于使用的倒计时方法充满好奇,但是现在你仍然被要求回答让倒计时结束的最少操作次数。

Input

一行一个非负整数n

Output

让倒计时结束的最少操作次数

Sample Input

24

Sample Output

5

HINT

对于全部数据,n<=10^18
 
这就是郑远航眼中的NOIP题2333333
设f[x][len][y]为9999999y,共有len个9,前面最大值为x的数减到0以下的步数,g[x][len][y]为减到0以下剩的值。
然后对于x,我们先逐位减到0,然后就是秀智商与心理素质的时候了。
#include<cstdio>
#include<cctype>
#include<queue>
#include<cmath>
#include<cstring>
#include<algorithm>
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define ren for(int i=first[x];i!=-1;i=next[i])
using namespace std;
typedef long long ll;
ll n,f[][][],g[][][],xp[];
int bit[],m;
int main() {
rep(x,,) rep(y,,) {
if(x<=y) f[x][][y]=,g[x][][y]=-x;
else f[x][][y]=,g[x][][y]=-x+y;
}
xp[]=;
rep(i,,) xp[i]=xp[i-]*;
rep(len,,) rep(x,,) rep(y,,) {
ll res=,cur=y;
dwn(i,,) res+=f[max(i,x)][len-][cur],cur=g[max(i,x)][len-][cur];
f[x][len][y]=res;g[x][len][y]=cur;
}
scanf("%lld",&n);
if(!n) puts("");
else if(n<) puts("");
else {
ll ans=,cur=n%,n0=n;
while(n0) bit[++m]=n0%,n0/=;
rep(i,,m-) {
int C=;
rep(j,i+,m) C=max(C,bit[j]);
int k;
if(i==) k=bit[i];
else k=bit[i]-;
dwn(j,k,) ans+=f[max(C,j)][i-][cur],cur=g[max(C,j)][i-][cur];
}
int k;
if(m==) k=bit[m];
else k=bit[m]-;
dwn(i,k,) ans+=f[i][m-][cur],cur=g[i][m-][cur];
dwn(i,m-,) dwn(j,,) ans+=f[j][i][cur],cur=g[j][i][cur];
printf("%lld\n",ans+);
}
return ;
}

BZOJ4230: 倒计时的更多相关文章

  1. 微信小程序中利用时间选择器和js无计算实现定时器(将字符串或秒数转换成倒计时)

    转载注明出处 改成了一个单独的js文件,并修改代码增加了通用性,点击这里查看 今天写小程序,有一个需求就是用户选择时间,然后我这边就要开始倒计时. 因为小程序的限制,所以直接选用时间选择器作为选择定时 ...

  2. Android开发案例 – 在AbsListView中使用倒计时

    在App中, 有多种多样的倒计时需求, 比如: 在单View上, 使用倒计时, 如(如图-1) 在ListView(或者GridView)的ItemView上, 使用倒计时(如图-2) 图-1 图-2 ...

  3. JS案例之3——倒计时

    利用简单的数字累加循环模拟倒计时的效果,逻辑比较简单.如果大牛们有更好的办法欢迎补充. 这种效果经常用于在规定的时间做某件事.比如在1分钟之后重新发送验证码等. 案例演示: 源代码如下: <!D ...

  4. js倒计时-倒计输入的时间

    计算指定时间到指定时间之间相差多少天.时.分.秒. 节日.活动.商城常用. 原理: 主要使用到时间戳,也就是从1970 年 1 月 1 日 到指定时间的毫秒数. 1. 求出毫秒差 :当两个时间直接进行 ...

  5. 微信小程序定时器组件(输入时间字符串即可倒计时)

    昨天写了代码,今天发现要重用,干脆就抽出来做个组件得了,顺便还改善了一下代码通用性. 昨天的代码在这里 github下载地址 用法: 引入: var timer = require('../../pl ...

  6. jQuery获取短信验证码+倒计时实现

    jQuery 短信验证码倒计时 <script type="text/javascript" charset="utf-8"> $(function ...

  7. 纯js实现10分钟倒计时

    一个简单实现倒计时的小栗子~ 效果图:简陋的不能再简陋了,捂脸 代码: <!DOCTYPE HTML> <html> <head> <title> 倒计 ...

  8. Android 在线订单倒计时设计

        接到一个需求,用户下单后,商店这边需要显示在线订单列表,订单十分钟内有效.于是需要设计倒计时,显示每个订单剩余处理时间.       倒计时剩余时间: 订单创建时间 + 10分钟  - 系统当 ...

  9. js获取手机验证码倒计时的实现

    方案一 <div class="div user-input"> <input type="number" class="code& ...

随机推荐

  1. django-cms 代码研究(五)深入(代码结构)

    前言: 前戏已经做得比较充分了,下面我们开始步入正题. 代码结构: cms |--admin (猜测是admin界面的二次开发和改良) |--cache (猜测是缓存机制的处理) |--extensi ...

  2. Android mtk单路录音问题

    在单路录音中,有两种情况导致底层录音资源被占用的问题: 1 开启vmLog后,拨打一个电话,挂断电话.如果挂断电话后,没有关闭vmlog进程,则会导致其它AP 无法得到底层的录音资源,从而无法录音. ...

  3. swiper组件实现向上翻页时缩小

    var mySwiper = new Swiper ('.swiper-container', { direction: 'vertical', loop: true, // 如果需要前进后退按钮 n ...

  4. 3Sum & 4Sum

    3 Sum Given an array S of n integers, are there elements a, b, c in Ssuch that a + b + c = 0? Find a ...

  5. tcp/IP点对点通信程序

    点对点的通信 服务器端与客户端在建立连接之后创建一个进程 服务器端: 子进程用于接收主机的输入并将数据发送出去.父进程用于接收客户端的数据并输出到主机. 子进程一直等待主机的输入,输入的数据放在发送缓 ...

  6. Java for LeetCode 025 Reverse Nodes in k-Group

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If ...

  7. Linux下RPM、tar.gz、DEB格式软件包的区别

      初接解Linux的朋友一定对软件的安装特别头疼,同样都是for Linux,但RPM.tar.gz.DEB包还是有很大区别的,这种区别很有可能使你的安装过程进行不下去.那我们应该下载什么格式的包呢 ...

  8. ACdream 1195 Sudoku Checker (数独)

    Sudoku Checker Time Limit:1000MS     Memory Limit:64000KB     64bit IO Format:%lld & %llu Submit ...

  9. android 中如何分析内存泄漏

    转载:http://blog.csdn.net/fulinwsuafcie/article/details/8363218 前提条件: 1,电脑安装了java 运行环境 2,手机端开启了 USB 调试 ...

  10. ytu 1938:首字母变大写(水题)

    首字母变大写 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 110  Solved: 43[Submit][Status][Web Board] Desc ...