这类问题与迷宫问题的走法有些类似,即经过多少步是否可以从起点到终点的问题。 代码如下: #include iostream using namespace std ; int main (){ int a , b , s ; cin a b s ; int sum = abs ( a ) + abs ( b )
这类问题与迷宫问题的走法有些类似,即经过多少步是否可以从起点到终点的问题。
代码如下:
#include <iostream>using namespace std;
int main(){
int a,b,s;
cin>>a>>b>>s;
int sum = abs(a)+abs(b);
if(sum>s){
cout<<"No";
}else if((sum-s)%2==0){
cout<<"Yes";
}else{
cout<<"No";
}
return 0;
}
分析:
首先,将终点的x,y值 平铺在 一维的数轴上。(因为每次移动为1个长度,平铺只会丢失方向信息,但是不会丢失长度信息)
在一维上后,二者的长度和(记为sum)与 步数之差的2的余数必须为0的原因:在当前的一维数组上,不同的两个线段总可以经过偶数个(-1+1=0)进行调和。 所以,使得条件满足。
sum>s为no的原因在于,sum在此时为绝对长度,s小于绝对长度后,不可能找到合适的(-1+1=0)进行调和。
注意,这种方法实际上就省去了很多具体情况的考虑,而是以总体进行考虑。
【本文转自:国外高防服务器 http://www.558idc.com/usa.html转载请说明出处】