题解:P12974 蒸蒸日上
三国杀坏事做尽。
题目大意
一个长度为
具体思路
为了方便,我们将两个人称为 a 和 b,两个人的位置为
首先我们把攻击距离和坐骑扔到一边,在只考虑位置的情况下算出他们的距离。
题目中提到,距离为两个玩家之间顺时针或逆时针相隔的人数最小值加上
算出距离后,只需要按照坐骑算出实际距离之后判断距离是否超过武器距离即可。
完整代码
于是乎,我们来到了大家最喜爱的代码环节。
#include<bits/stdc++.h>
#define int long long
using namespace std;
struct man{
int x;//位置
int l;//攻击距离
string w;//坐骑
};
signed main(){
int n;
cin>>n;
man a,b;
int x,y;//为了方便计算,这里我用了两个变量分别表示a到b和b到a的实际距离。
cin>>a.x>>a.l>>a.w>>b.x>>b.l>>b.w;
x=y=min(abs(b.x-a.x),n-abs(b.x-a.x));//两人初始距离相等。
//计算坐骑
if(a.w=="+1")y++;
if(b.w=="+1")x++;
if(a.w=="-1")x--;
if(b.w=="-1")y--;
//判断距离
if(a.l>=x)cout<<"Yes\n";
else cout<<"No\n";
if(b.l>=y)cout<<"Yes\n";
else cout<<"No\n";
return 0;//好习惯
}