广东工业大学第12届ACM程序设计大赛 Problem E: 倒水(Water)
来源:互联网 发布:cf显示网络异常win7 编辑:程序博客网 时间:2024/05/17 03:51
Problem E: 倒水(Water)
Description
一天,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
1
3
15808
HINT
恕我愚钝 看到1 0 的关系果断的转化为二进制找规律。。。
就这么出来了
具体操作看代码吧
#include<stdio.h>#include<queue>using namespace std;int a[10003];int num=0;void cmp(int x){ num=0; while(x) { a[num++]=x%2; x/=2; }}int pow(int x){ int ans=1; for(int i=1; i<=x; i++) ans*=2; return ans;}int main(){ int t; scanf("%d",&t); while(t--) { num=0; int n,k; scanf("%d%d",&n,&k); cmp(n); int f=0; for(int i=num-1; i>=0; i--) { if(a[i]==1) f++; if(f==k) { f=i; break; } } int ans=0; for(int i=0; i<f; i++) { if(a[i]==1) { int z=0; for(int j=i+1; j<num; j++) { if(a[j]==1&&z==0) { z=j; a[j]++; } if(a[j]==2) { a[j]=0; a[j+1]++; } } ans+=(pow(z)-pow(i)); } } printf("%d\n",ans); }}
上述代码有点长比赛后想了一下,,能优化。。
还是优化了好看。。
#include<stdio.h>#include<stdio.h>#include<iostream>using namespace std;int a[10003];int num=0;void cmp(int x){ num=0; while(x) { a[num++]=x%2; x/=2; }}int pow(int x){ int ans=1; for(int i=1; i<=x; i++) ans*=2; return ans;}int main(){ int t; scanf("%d",&t); while(t--) { num=0; int n,k; scanf("%d%d",&n,&k); cmp(n); int f=0; for(int i=num-1; i>=0; i--) { if(a[i]==1) f++; if(f==k) { f=i; break; } } int ans=pow(f); int flag=0; for(int i=0;i<f;i++) { if(a[i]) flag+=pow(i); } printf("%d\n",ans-flag); }}
1 0
- 广东工业大学第12届ACM程序设计大赛 Problem E: 倒水(Water)
- 2017广东工业大学程序设计竞赛 E倒水(Water)
- 广东工业大学第12届ACM程序设计大赛 Problem H: tmk买礼物
- 广东工业大学第12届ACM程序设计大赛 Problem C: 爬楼梯
- 广东工业大学第12届ACM程序设计大赛 Problem A: 两只老虎
- 广东工业大学第12届ACM程序设计大赛 Problem D: 只有通过毁灭才能揭示真理
- 广东工业大学第12届ACM程序设计大赛部分题解
- Problem E: 倒水(Water)
- 山东省第五届ACM大赛--Problem E: Full Binary Tree
- 中国(北方)大学生程序设计训练赛(第一周)E. water problem
- 中国(北方)大学生程序设计训练赛(第一周)E. water problem
- 中国(北方)大学生程序设计训练赛(第一周)(Problem E: Water Problem-矩阵快速幂)
- 10年第六届湖南省acm程序设计大赛 第五题 E 内部收益率
- Contest1040 - 第三届“图灵杯”NEUQ-ACM程序设计大赛(个人赛) E: 好学的coco
- 广东工业大学2016校赛 Problem E: 积木积水
- “玲珑杯”郑州轻工业学院第八届ACM程序设计大赛Problem G: 蛤玮点菜
- 山东省第四届ACM程序设计大赛 Problem A:Rescue The Princess (计算几何)
- 2014辽宁省ACM程序设计大赛网络赛 Problem A: Decryption
- windows下Qt的安装和使用
- An introduction to boundary conditions
- zstu-4270同源数
- CSS层叠样式表
- sharding-jdbc 使用,进行分库分表以及多数据库间的事物验证
- 广东工业大学第12届ACM程序设计大赛 Problem E: 倒水(Water)
- 关于vs2015每次打开都要配置opencv问题
- CCF 学生排队 Java实现
- struts2 基本配置和介绍
- 翻转链表
- 文章标题
- TOJ 4483: Common Digit Pairs
- 学习淘淘商城第十六课(展示后台管理页面)
- 初识嵌入式