E. Superhero Battle

2124 ワード

http://codeforces.com/contest/1141/problem/E
标题:モンスターライフ値Hがあり、複数回攻撃が可能で、1ラウンドn分、毎分モンスターライフ値a[i]を変更し、倒すことができるかどうかを尋ねる.
構想:輪数を求めて、更に直接シミュレーションします;
まとめ:細部に気づかなかったので、まず1ラウンドが達成されたかどうかを見て、それから1ラウンドのsumがゼロより大きいかどうかを見て成功できるかどうかを判断します.書いている間に入れ替わりました!!!
ホイール数を計算するには、最後のホイールはHがnより大きい間のダメージの最大値であることに注意してください.は(H-Min)/sumで、Minより大きい生命を残して直接シミュレーションしたのです!!!书いた时に最后のシミュレーションは间违っていました!!
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;

#define sfi(i) scanf("%d",&i)
#define pri(i) printf("%d
",i) #define sff(i) scanf("%lf",&i) #define ll long long #define mem(x,y) memset(x,y,sizeof(x)) #define INF 0x3f3f3f3f #define eps 1e-6 #define PI acos(-1) #define lowbit(x) ((x)&(-x)) #define zero(x) (((x)>0?(x):-(x)) inline void sc(T &ret) { char c; ret = 0; while ((c = getchar()) < '0' || c > '9'); while (c >= '0' && c <= '9') { ret = ret * 10 + (c - '0'), c = getchar(); } } ll power(ll x,ll n) { ll ans=1; while(n) { if(n&1) ans=ans*x%mod; x=x*x%mod; n>>=1; } return ans; } ll a[maxn]; int main() { ll H; ll sum=0; int n; ll Min=INF; cin>>H>>n; for(int i=0;i>a[i]; sum+=a[i]; Min=min(Min,sum); } //cout<=0) { cout<