B. Monsters Attack!
1.C. Insert and Equalize2.C. Removal of Unattractive Pairs3.D. Jumping Through Segments4.E. Good Triples5.F. Shift and Reverse6.D. Yet Another Monster Fight7.A. Constructive Problems8.C. Game with Multiset9.A. Rating Increase10.B. Swap and Delete11.A. Problemsolving Log12.B. Preparing for the Contest13.C. Quests14.D. Three Activities15.E2. Game with Marbles (Hard Version)16.cf刷题有感17.A. Anonymous Informant18.A. Forked!19.B. Make Almost Equal With Mod20.C. Heavy Intervals21.D. Split Plus K22.A. 202323.B. Two Divisors24.C. Training Before the Olympiad25.D. Mathematical Problem26.F. Greetings27.C. Partitioning the Array28.G. Bicycles29.E. Eat the Chip30.G. Lights31.D. Array Repetition32.D. Berserk Monsters33.E. Increasing Subsequences34.D. Very Different Array35.G. Mischievous Shooter36.B. Plus-Minus Split37.B. A Balanced Problemset38.C. Did We Get Everything Covered39.D. Find the Different Ones!40.C. Grouping Increases41.D. Good Trip42.C. Physical Education Lesson43.E. Final Countdown44.D. Divisible Pairs45.G. Vlad and Trouble at MIT46.A. Brick Wall47.B. Minimize Inversions48.C. XOR-distance49.A. Moving Chips
50.B. Monsters Attack!
51.C. Find B52.D. Slimes53.C. Turtle Fingers: Count the Values of k54.D. Turtle Tenacity: Continual Mods55.D. Vlad and Division56.C. LR-remainders57.D. Lonely Mountain Dungeons题解
什么时候会输?
首先我们要贪心一次性把离自己最近的怪物消灭掉,但是一回合内消灭掉了一个怪物之后还有剩余,我么就把剩余的扣在第二个离自己最近的怪物上
如果我当前回合没有消灭怪物,并且怪物下一回合就到零点,那我就输了
我们可以想象成这样的动画:我们每回合一次性往怪物身上丢出所有的手雷,手雷依次爆炸,直到怪物被炸死,剩余的手雷会返回
所以我们有两个从1开始的线性变量,一个是回合数,一个是怪物下标
然而回合数不确定,所以不能以回合数作为循环主体,然后一个回合可能可以砍掉多个怪兽,也有可能多个回合砍掉一个怪兽,所以我们不能用for循环
然后观察样例发现,进攻时是回合开始时,怪兽移动实在回合结束时,所以判断怪兽在当前回合会不会到零点要在进攻之后判断
当当前怪兽没死,且回合数大于x时,失败
code
#include<bits/stdc++.h>
using namespace std;
struct unit
{
int a,x;
}mon[300005];
bool cmp(unit a,unit b)
{
return abs(a.x)<abs(b.x);
}
int main()
{
int t;
cin>>t;
while(t--)
{
int n,k;
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>mon[i].a;
for(int i=1;i<=n;i++) cin>>mon[i].x;
sort(mon+1,mon+1+n,cmp);
int r=1,i=1,en=k;
while(i<=n)
{
mon[i].a-=en;
if(mon[i].a<=0)
{
en=-mon[i].a;
i++;
}
else
{
if(abs(mon[i].x)<=r) break;
r++;
en=k;
}
}
if(i==n+1) puts("YES");
else puts("NO");
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~