您的位置:首页 > 其它

大吉大利今晚吃鸡——跑毒篇

2018-01-22 00:52 169 查看
题目链接:点击打开链接

问题

1. 边界部分恰好擦着的时候到底是死是活.......写到程序里就是有没有=的问题。

首先题目里明确指出打包的时候擦着就是死。

然后后面有个带着你理解第二个样例的部分,这个样例是有目的,是告诉你当你最后一步到边界时(只剩下一步)却只剩下一丝血是能活下来的。

2.思路难道真的是模拟?我没有,而只是把能走的最长距离算出来,然后和b比较一下就好啦。

更具体的注意点看注释吧。

贴代码:

#include <iostream>
using namespace std;

int main()
{
int T;
int a, b, c;

cin >> T;

for(int i = 1; i <= T; i++)
{
cin >> a >> b >> c;

//这几个m是核心时间
//m100直接走不打包最多能走几米,注意光走是向上取整
int m100 = (100 + a - 1) / a;
//m40是打包的话能走多远,打包向下取整
int m40 = (100 - (float)a*6 ) / a;
//这两个是80血量,同上
int m80 = (80 + a - 1 )/ a;
int m20 = (80 - (float)a*6 ) / a;

//打包情况下,如果是整除就要减一
if((100 - a*6) % a == 0)
m40--;
if((80 - a*6) % a == 0)
m20--;

//cout << m100<<' '<<m40<<' '<<m80<<' '<<m20<<endl;

//下面和b比较的都没有=,因为等于是能活的
//和6比较都有=,因为打包不能擦着

//直接走不打包的情况:打包没掉血快或者根本没包
if( m100 <= 6 || c == 0 ){
if(m100 < b)
cout << "NO\n";
else
cout << "YES\n";
continue;
}//打了一次包后在80血量的情况下掉血比再打包快
else if(m80 <= 6){
if(m40 + m80 < b)
cout << "NO\n";
else
cout << "YES\n";
continue;
}
else{//把所有包都用了后能走的最远距离
if(m40 + (c-1)*m20 + m80 < b)
cout << "NO\n";
else
cout << "YES\n";
continue;
}
}

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