Codeforces Round #630 (Div. 2) A. Exercising Walk(简单思维)

Codeforces Round #630 (Div. 2) A. Exercising Walk(简单思维)

题目传送门

题意:给定起点和四个方向要走的步数,问能否在指定范围内完成。

思路1:考虑分上下左右讨论所有不能走的情况,剩下就是能走的。

思路2:考虑能走的情况,剩下就是不能走的。

思路1代码

#include<bits/stdc++.h>
using namespace std;
int main(){
	int t;
	cin>>t;
	while(t--){
		int a,b,c,d;
		cin>>a>>b>>c>>d;
		int x,y,x1,y1,x2,y2;
		cin>>x>>y>>x1>>y1>>x2>>y2;
		int m=a-b,n=c-d;
		//printf("m=%d,n=%d\n",m,n);
		if((x-x1==0&&x2-x==0&&(a||b))||(y-y1==0&&y2-y==0&&(c||d))) { //如果不能往某一方向走 
			puts("NO");
			continue;
		} 
		if(m>=0){ //分上下左右四种情况讨论不能走 
			if(x-x1<m){
			 puts("NO");
			 continue;
		}
		}
		else if(x2-x+m<0){
			puts("NO");
			continue;
			}
		if(n>=0){
			if(y-y1<n){
				puts("NO");
			 continue;
			}
		}
		else if(y2-y+n<0){
			puts("NO");
			continue;
		}
		puts("YES");
	}
} 

思路2代码

#include<bits/stdc++.h>
using namespace std;
int main(){
	int t;
	cin>>t;
	while(t--){
		int a,b,c,d;
		cin>>a>>b>>c>>d;
		int x,y,x1,y1,x2,y2;
		cin>>x>>y>>x1>>y1>>x2>>y2;
		x+=b-a,y+=d-c;
		if(x>=x1&&x<=x2&&y>=y1&&y<=y2&&(x2>x1||a+b==0)&&(y2-y1||c+d==0)) puts("YES");
		else puts("NO");//如果终点在范围内且能往该方向走或者不用走 输出YES 
	}
}
全部评论

相关推荐

当初高考报计算机真是造大孽了啊!卷的飞起!哪都是计算机的人,考研,考公,找工作全他奶的计算机的人,太难了。国企也是。关键一届比一届卷,造大孽了!
_Lyrics_:因为计算机,没有体验到快乐的大学研究生时光,好不容易修完课程就要出去实习,看着别人专业可以一起搓麻将,游山玩水,而我却要自己一个人住在北上不到十平米的出租屋,每天两点一线
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务