题解:P12974 蒸蒸日上
前言
不要以为你有神武将你就可以乱诬蔑人,中间忘了,三国杀,就是氪佬享有最高权力,中间忘了,但是,群众的眼睛是雪亮的!
如果你用一堆我看不懂的技能秒了我,会让全天下的平民玩家知道,三国杀的腐朽!
三国杀将会臭名昭著!
解法
模拟,首先先算出 A 和 B 之间的最短距离(顺时针和逆时针)然后加上加减马的情况,最后得出的距离如果大于武器攻击范围则输出 No 反之输出 Yes。
(无端)
code
#include<bits/stdc++.h>
#define endl '\n'
#define r0 return 0
#define inf (0x7fffffff)
#define maxn ( +5)
#define int long long
using namespace std;
inline int read(){int x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}return x*f;}
int n,ax,ay,bx,by,bz,az;
signed main(){
cin >> n >> ax >> ay >> az >> bx >> by >> bz;
int s=min(abs(ax-bx),abs(ax+n-bx));
if(s+(bz==1)-(az==-1)<=ay){
cout << "Yes\n";
}else{
cout << "No\n";
}
if(s+(az==1)-(bz==-1)<=by){
cout << "Yes\n";
}else{
cout << "No\n";
}
}