2017广东工业大学程序设计竞赛决赛(重现)-倒水
2017-03-29 23:42
405 查看
倒水
一天,CC买了N个容量可以认为是无限大的瓶子,开始时每个瓶子里有1升水。接着~~CC发现瓶子实在太多了,于是他决定保留不超过K个瓶子。每次他选择两个当前含水量相同的瓶子,把一个瓶子的水全部倒进另一个里,然后把空瓶丢弃。(不能丢弃有水的瓶子)显然在某些情况下CC无法达到目标,比如N=3,K=1。此时CC会重新买一些新的瓶子(新瓶子容量无限,开始时有1升水),以到达目标。
现在CC想知道,最少需要买多少新瓶子才能达到目标呢?
Input
第一行一个整数T,表示有T组数据。接着T行,每行两个正整数, N,K(1<=N<=10^9,K<=1000)。
Output
一个非负整数,表示最少需要买多少新瓶子。Sample Input
3 3 1 13 2 1000000 5
Sample output
13
15808
等几天再看看,不太懂
#include<stdio.h> #include<math.h> #include<algorithm> using namespace std; int main() { int a;long long p[40]; scanf("%d",&a); p[1]=1; for(int i=2;i<33;i++) { p[i]=p[i-1]*2; } while(a--) { long long s,d; scanf("%lld%lld",&s,&d); long long ans=0; int i=32; while(p[i-1]>s) i--; ans=p[i]-s; i--; long long sum=0; while(d--) { while(sum+p[i]>s) { i--; } ans=min(ans,abs(sum+p[i+1]-s)); sum=sum+p[i]; // printf("%lld %lld\n",sum,p[i-1]); if(sum>=s) { printf("%lld\n",min(sum-s,ans)); break; } } if(sum<s) printf("%lld\n",ans); } return 0; } /************************************************************** Problem: 1228 User: henussk Language: C++ Result: Accepted Time:0 ms Memory:1092 kb ****************************************************************/
“`
相关文章推荐
- 2017广东工业大学程序设计竞赛决赛E 倒水(二进制)
- 2017广东工业大学程序设计竞赛决赛 Problem E: 倒水(Water)(思维)
- 2017广东工业大学程序设计竞赛决赛 Problem E: 倒水(Water)(思维)
- 2017广东工业大学程序设计竞赛决赛 E倒水(Water)+Htmk买礼物题解
- 2017广东工业大学程序设计竞赛决赛 Problem E: 倒水(Water)(思维)
- 2017广东工业大学程序设计竞赛决赛 Problem E: 倒水(Water)(思维)
- 2017广东工业大学程序设计竞赛决赛 Problem E: 倒水(Water)(思维)
- 2017广东工业大学程序设计竞赛决赛 Problem E: 倒水(Water)(思维)
- 2017广东工业大学程序设计竞赛决赛-E(倒水)
- 2017广东工业大学程序设计竞赛决赛 Problem E: 倒水
- 2017广东工业大学程序设计竞赛决赛 Problem E: 倒水(Water)(思维)
- 2017广东工业大学程序设计竞赛决赛 Problem E: 倒水(Water)(思维)
- 2017广东工业大学程序设计竞赛决赛(重现)-爬楼梯
- 2017广东工业大学程序设计竞赛决赛 Problem E: 倒水(Water)(思维)
- 2017广东工业大学程序设计竞赛决赛 Problem E: 倒水(Water)(思维)
- 2017广东工业大学程序设计竞赛决赛 Problem E: 倒水(Water)(思维)
- 2017广东工业大学程序设计竞赛决赛 Problem E: 倒水(Water)(思维)
- 2017广东工业大学程序设计竞赛决赛-倒水(Water)(二进制的奇妙运用)
- 2017广东工业大学程序设计竞赛决赛 Problem E: 倒水(Water)(思维)
- 2017广东工业大学程序设计竞赛决赛 E-倒水(Water) (二进制的应用) + H-tmk买礼物(dp思想)