這個啊 我本來想做一個加加我的小分 看了看B 感徑訓挺有意思就發出了吧 雖然啥也不是
B.偉大的英雄
測驗時間限制2秒
測驗512兆位元組存盤器限制
輸入標準輸入
輸出標準輸出
偉大的英雄保衛的國家,荷馬的生活,英雄有一個攻擊力和初始的健康B,在英雄面前有n個怪物,i-i怪物攻擊ai的力量和初始健康比,
英雄或怪物活著,如果他的健康狀況良好)【多還是等于1;】;如果他的健康狀況不好,那么他就死了)【0】
為了保護國內的人們,英雄將戰斗的怪物,直到英雄死了,或者所有的怪物都死了,
在每一個戰斗中,英雄可以選擇一個任意的活怪物和戰斗,假設選擇一個怪物,和一個英雄的健康和一個怪物的戰斗前,分別為x和y,戰斗結束后,英雄的健康和一個怪物的數量分別成為X-ai和Y-A,
注意,英雄可以打同一個怪物幾次,
為了國家的人的安全,請告訴他們,一個偉大的英雄是否能殺死所有的怪物)(
輸入資料
每個測驗包含多個輸入資料集,第一行包含t≤1≤t≤105)輸入資料集的數量,輸入資料集描述如下,
每個輸入資料集的第一行包含三個整數的A≤1≤A≤109,B≤1≤B≤109)和n≤1≤n≤105)-攻擊偉大英雄的力量,一個偉大的英雄的初始健康和怪物的數量分別,
每一個輸入資料集的第二行包含n整數a1,a2愛,(……)1≤ai≤109,其中ai表示攻擊i-go怪物的力量,
每一個輸入資料集的第三行包含n整數b1,b2?1,≤bi≤109,其中bi代表一個怪物的初始健康值,
保證所有輸入資料集的n值不超過105,
輸出資料
如果一個偉大的英雄可以殺死所有的怪物,否則你可以把“NO”沒有引號,
例子
輸入資料
5
3 17 1
2
16
10 999 3
10 20 20
100 50 20
1000 1000 4
200 300 400 500
1000 1000 1000
999 999 1
1000
1000
999 999 1
10000000,
999
周末資料
Yes
Yes
Yes
NO
Yes
說明
第一組輸入資料將有六個英雄和唯一的怪物之間的戰斗,然后,怪物死了,和英雄的健康數量是17-6×2=5>0,因此,答案是“Yes”,除此之外,英雄還活著,
在第二組輸入資料后,所有的怪物都死了,英雄的健康值將是709不管所有戰斗的順序,因此,答案是“Yes”,
在第三組輸入資料可能的順序-戰斗1-m,2-m,3-m和4-m的怪物在這個順序,在所有的戰斗后,英雄的健康數量成為-400,不幸的是,英雄死了,但所有的怪物都死了,所以答案是“Yes”,
在第四組輸入資料中,英雄是死的,但怪物仍然活著與健康的1000-999=1,因此,答案是“NO”,
思路 對決的時候先和攻擊力小的 來pk 不然會有時候會浪費不必要的血量
比如 他10攻擊力 你15滴血 他 10滴血 你 5攻擊力 那么你要殺他兩次 你-5滴血 死了
如果 這時還有一個怪獸 1攻擊力 1生命力 你都打不了
如果先打這個 1 那么剩14滴血 還可以跟第一個同歸于盡
所以要排序
如果用sort
嗯 我就不說了
2000MS
還是說了
然后我改成優先佇列 自動排序 加pair<int,int>
第一個是攻擊力,第二個生命力
#include<bits/stdc++.h>
#include<stdio.h>
#include<string.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
ll read(){ll res = 0, ch, flag = 0;if((ch = getchar()) == '-')flag = 1;else if(ch >= '0' && ch <= '9')res = ch - '0';while((ch = getchar()) >= '0' && ch <= '9' )res = res * 10 + ch - '0';return flag ? -res : res;}
const int maxn =1e6+199 ;
ll sum=0,maxa=-1;
ll n,m,k,w,ans=0,cnt=0;
ll dp[maxn];
//int a[300][300];
//int b[maxn];
ll mod=1e9+7;
map<int,int>mp;
priority_queue< PII,vector<PII>,greater<PII> >q;
ll a[maxn];
ll b[maxn];
typedef struct node{
int g;
int f;
}ss;
ss e[maxn];
bool cmp(ss a,ss b)
{
return a.f<b.f;
}
int main()
{
n=read();
while(n--)
{
k=read();
m=read();
w=read();
for(int i=1;i<=w;i++)
e[i].g=read();
for(int i=1;i<=w;i++)
e[i].f=read();
for(int i=1;i<=w;i++)
q.push({e[i].g,e[i].f});
ll t;
for(int i=1;i<=w;i++)
{
if(q.top().second%k==0)
{
m-=(q.top().second/k)*q.top().first;
}
else
{
m-=(q.top().second/k+1)*q.top().first;
}
if(i==w)
t=q.top().first;
q.pop();
}
if(m+t>0)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/258517.html
標籤:其他
上一篇:HaaS年度經典案例:兒童手表
下一篇:寒假CS每日打卡 Feb.8th
