您的位置:首页 > 大数据 > 人工智能

(HDU 5802)2016 Multi-University Training Contest 6 Windows 10 (贪心)

2016-08-06 20:54 567 查看

思路

为什么贪心题/搜索题也可以这么难TAT

对于给定的n,m,如果n≤m可以直接给出答案

对于n>m的情况

答案会出现在一直往下减再往上加和一直往下减休息几次再减之中

如果cur>tar的情况,可以一直往下减

休息一下的次数可以用来抵消往上加的次数

题目说不能减到0以下,是指如果减了会小于0,那么音量变成0(不是说不能减)

任何时候执行加法效果都是一样的

代码

#include <bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
#define rep(i,a,b) for(int i=a;i<b;i++)
#define debug(a) printf("a =: %d\n",a);
const int INF=0x3f3f3f3f;
const int maxn=1e6+50;
const int Mod=1000000007;
const double PI=acos(-1);
typedef long long ll;
using namespace std;

int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
int T,cur,tar;
scanf("%d",&T);
while(T--){
scanf("%d %d",&cur,&tar);
if (cur<=tar) printf("%d\n", tar-cur);
else{
int ans=INF,waitCnt=0,downCnt=0;
int x=1;
while(cur>=tar){
//  cout<<cur<<" "<<tar<<endl;
downCnt++;
cur-=x;
x<<=1;
if (cur<=tar){
if (tar-cur<=waitCnt){
ans=min(ans,downCnt+waitCnt);
}else{
ans=min(ans,downCnt+max(tar-max(cur,0),waitCnt));
//wait
waitCnt++;
x>>=1;
cur+=x;
x=1;
downCnt--;
}
}
}
printf("%d\n",ans);
}

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐