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; }
相关文章推荐
- UVA_102_Ecological Bin Packing
- NSURLSession与AFNetworking3.0
- 【neutron】mitaka版本openstack网络之open vSwitch
- 标准I/O库
- 那些不得不惊叹的位运算
- OpenGL学习之路(三)
- LoaderManager使用详解(一)---没有Loader之前的世界
- android 框架 Afinal 解析
- AngularJs
- 单例模式代码块
- leetcode-70. Climbing Stairs
- 使用 Git 改进工作方式
- 以后还是要多写点博客
- 20145233韩昊辰 第三次实验报告
- [读书笔记] CSS权威指南2: 结构和层叠
- 团队冲刺第一阶段个人工作总结6
- 学习笔记(七)广播
- HDU 4341-分组背包/01背包
- winform datagridview实时更新显示查询结果
- leetcode 112.Path Sum-数路径和|深度遍历