日结(3.26
A - Super Ryuma
AtCoder - abc184_c
思路:根据题设,我们能从初始点跳往横纵坐标绝对值和小于3的点或横纵坐标移动坐标绝对值相同的点,所以按规则来说到达任意点最多步数为3步,第一步可到位置如图,第二步可到绝对值和小于六的坐标点以及两点的坐标差的和为偶数的点,大于六且为奇则要走三步
#include<iostream>
#include<cstring>
#include<string.h>
#include<cstdio>
#include <string>
#include<math.h>
using namespace std;
int main()
{
long long int r1,r2;
long long int r3,r4;
cin>>r1>>r2;
cin>>r3>>r4;
//printf("%lld\n",abs(r1-r3)+fabs(r2-r4));
if(r1==r3&&r2==r4)cout<<"0"<<endl;
else if((abs(r1-r3)+abs(r2-r4)<=3)||(abs(r1-r3)==abs(r2-r4)))cout<<"1"<<endl;
else if(abs(r1-r3)+abs(r2-r4)<=6)cout<<"2"<<endl;
else{
int a1=abs(r1-r3),a2=abs(r2-r4);
if(a1<a2){a2-=a1;a1=0;if(a2<=3)cout<<"2"<<endl;
else {
if(a2%2==1)cout<<"3"<<endl;
else cout<<"2"<<endl;
}
}
else {a1-=a2;a2=0;if(a1<=3)cout<<"2"<<endl;
else {
if(a1%2==1)cout<<"3"<<endl;
else cout<<"2"<<endl;
}
}
}
}
抽象:
因为多态的存在,子类都可以覆写父类的方法
如果父类的方法本身不需要实现任何功能,仅仅是为了定义方法,目的是让子类去覆写它,那么,可以把父类的方法声明为抽象方法
abstract
,表示一个抽象方法
因为抽象方法无法执行,所以不能在类实例化,不过可以使用抽象类实力
抽象类只能被设计来继承它,让子类覆写其方法,起到一种规范作用
接口:纯抽象方法,无字段出现,则可以使用interface
可以声明一个接口
方法默认都是public abstract
当一个具体的class
去实现一个interface
时,需要使用implements
关键字
不同于继承,一个类可以有多个接口只要在class 类 implenments 接口名,接口名,接口名
接口之间也可以继承 向上转型
同时接口也可以定义default方法,在子类中不必覆写此方法,但接口不能有字段故
default
方法和抽象类的普通方法是有所不同的。因为interface
没有字段,default
方法无法访问字段,而抽象类的普通方法可以访问实例字段。
静态字段:
是用static
修饰的字段,叫静态字段:static field
。
实例字段在每个实例中都有自己的一个独立“空间”,但是静态字段只有一个共享“空间”,所有实例都会共享该字段
即无论修改哪一个实力的静态字段,其都会更改
静态方法
有静态字段,就有静态方法。用static
修饰的方法称为静态方法。
调用实例方法必须通过一个实例变量,而调用静态方法则不需要实例变量,通过类名就可以调用。
ru: person.run();
同时:
因为interface
是一个纯抽象类,所以它不能定义实例字段。但是,interface
是可以有静态字段的,并且静态字段必须为final
类型:
字段只能是public static final
类型,因为只能是改类型,所以可以不写修饰符默认是此类型
类五大成员:类,属性,方法,作用域,内部类