您的位置:首页 > 其它

csuoj-1721-皇家火枪手

2016-04-24 18:18 453 查看

Description

CLASH ROYAL是个有趣的游戏,

Johnson最近也是被它深深的迷上了。

火枪手是Johnson最喜欢用的一张卡,可能是感觉火枪打人有种爆头的快感把233

今天Johnson运气貌似特别好,对面选手游戏过程中掉线了

机不可失,Johnson准备派遣自己引以为豪的火枪大军击败对面的守卫塔

此时守卫塔还有m点血量,一个火枪手的攻击力为a点伤害每秒,但是守卫塔同样能够攻击火枪手,

我们假定守卫塔的攻击力正好可以2秒钟打死一个火枪手,那么这个被攻击的火枪手在死前可以对塔造成2*a点的伤害

现在离游戏结束只剩下k秒的时间了,Johnson此刻最少同时要派出多少个火枪手能在游戏结束前干掉对面(我们假定可以一次性派出无数个火枪手,不受圣水的限制)

Input

第一行输出一个T,表示有T组数据

每组数据输入三个正整数 m , a , k (0<m,a<=10^8 , 0<k<=100)

Output

每组数据输出一个整数表示最少一次要派出多少个火枪手

Sample Input

2
3 1 1
4 2 3

Sample Output

3
1


这道题就是一个塔,然后我要出n个兵,每个兵活2s,每次打a点伤害,我还有ks时间,问出兵的最小值。

一开始这道题是队友读的,然后全场好像不少人做了,但是准确率都不高,队友wa了一次,我看着很心急啊,因为他们题都读错了。这道题是最后还有几分钟我们敲出来的。其实就是一个还行的模拟题吧。最后我的想法是既然顺着不好求,就反着来,假定一个兵不死,然后分奇偶推公式来算出多打的那么一部分伤害。然后就a了

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;

typedef long long ll;

int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int minn=99999999;
ll m,a,k;
int ans=0;
scanf("%lld%lld%lld",&m,&a,&k);
for(int i=1;i<=k;i++)
{
if(i%2==1)
{
ll N=m+(((i-1)*(i-1))/4)*a;
ans=N/(i*a);
if(ans*i*a!=m)
ans++;
if(ans<minn)
{
minn=ans;
}
}
else
{
ll N = m + (1 + (i - 2) / 2) * ((i - 2) / 2) * a;
ans =N/(i*a);
if(ans*i*a!=m)
ans++;
if(ans<minn)
{
minn=ans;
}
}
}
printf("%d\n",minn);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: