hdu 5802 windows 10
来源:互联网 发布:下载淘宝网到手机桌面 编辑:程序博客网 时间:2024/05/18 19:19
题意:把音量从p调到q,
若 q >= p,一直按着每次音量上升1
若 q < p ,每次按着的那一秒下降1,接下来一秒下降2,4,8....(2x),x是前一秒下降的值。中途可以选择按键停止或up上升
求 p -> q的最小时间。
思路:枚举 2^tx-1 > q - p,选择降到q的下方或上方,然后逼近。
做多校时由于一直想着按up要加+1所以做了两边dfs,一直tle,看了题解才恍然大悟:
以下是看过标程写的代码:记录stop,停下多少次,不管有没有up,如果最终跳到q的下方,所有向上+1的作用都可以和从q下面到q的时间抵消。(所以不用考虑一开始先向上再下来)
#include <iostream>#include <cstdio>using namespace std;typedef long long ll;ll dfs(int now ,int goal,int stop,ll ans){ if(now == goal) return ans; int tx = 0; while(now - (1<<tx) + 1 > goal) tx++; //与q点重合 if(now - (1<<tx)+1 == goal) return ans + tx; //在q点下方 ll dis = goal - max(0LL,(ll)now-(1<<tx)+1); ll tm = tx + max(0LL,(ll)(dis - stop)); //在q点上方 return min(ans + tm ,dfs(now - (1<<(tx-1)) + 1 ,goal,stop+1,ans+tx));}int main(){ //freopen("in.txt","r",stdin); int p,q,t; scanf("%d",&t); while(t--){ scanf("%d%d",&p,&q); if(q>=p){ printf("%lld\n",(ll)(q - p)); } else{ printf("%lld\n",dfs(p,q,0,0LL)); } } return 0;}
0 0
- hdu 5802 Windows 10
- hdu 5802 Windows 10
- hdu 5802 windows 10
- HDU 5802 Windows 10
- hdu 5802 Windows 10 (贪心)
- HDU 5802 Windows 10(dfs)
- HDU 5802 Windows 10【贪心】
- hdu 5802 Windows 10 思维
- HDU 5802 Windows 10 (贪心)
- hdu 5802 Windows 10 (贪心+dfs)
- hdu 5802 Windows 10 (贪心 + 思维)
- HDU 5802 Windows 10(dfs)
- HDU-5802-Windows 10-贪心+dfs
- HDU 5802 Windows 10(贪心+DFS)
- hdu 5802——Windows 10
- HDU-5802-Windows 10(DFS+贪心)
- HDU 5802 Windows 10(贪心+dfs)
- HDU 5802 Windows 10 (贪心+DFS)
- 数学基础 —— 向量运算(点积)
- Java.Web学习笔记 Struts1
- LeetCode:237. Delete Node in a Linked List
- HDU1024 这压缩真先进...先进的我想跳河
- 岛上书店荐书录
- hdu 5802 windows 10
- 嵌入式web服务器lighttpd的交叉编译及配置--xilinx zynq
- Stingray Traffic Manager10.0 安装
- Servlet 自动生成验证码
- 和其他一些面向对象的编程语言一样,不是所有的变量(方法)都要通过创建对象来调用,还可以通过给变量(方法)加上static关键字来直接调用。
- CFormView侧栏停靠
- 数据结构实验之栈:行编辑器
- leetcode 32. Longest Valid Parentheses
- 2016多校联赛6H (hdu5800) To My Girlfriend