AcWing 1219. 移动距离 超级暴力 牛逼
原题链接
简单
作者:
kwh666
,
2024-02-05 19:18:13
,
所有人可见
,
阅读 38
牛逼
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
int w=0,m=0,n=0,flag=1,i=0,j=0,p=0,q=0,res=0;
int hm=0,gm=0,hn=0,gn=0;
scanf("%d%d%d",&w,&m,&n);
int x=0;
x=(10000+w)/w;
int a[x][w];
for(int i=0;i<w;i++){
a[0][i]=i+1;
}
if(w!=2&&w!=10000){
for(int i=1;i<x;i++){
if(flag%2==1){
a[i][0]=2*w-1+a[0][j-1];
for(int j=1;j<w;j++){
a[i][j]=a[i][j-1]+1;
}
}else{
a[i][0]=a[i-1][0]+1;
for(int j=1;j<w;j++){
a[i][j]=a[i][j-1]-1;
}
}
flag++;
}
if(m%w==0){
gm=m/w;
}else{
gm=m/w+1;
}
if(gm%2==0){
hm=w+1-(m%w);
}else{
hm=m%w;
}
if(n%w==0){
gn=n/w;
}else{
gn=n/w+1;
}
if(gn%2==0){
hn=w+1-(n%w);
}else{
hn=n%w;
}
p=fabs(hm-hn);
q=fabs(gm-gn);
res=p+q;
}
int x1,y1;
if(w==2){
if(m%2==0&&n%2==0||m%2==1&&n%2==1){
x1=0;
}else{
x1=1;
}
if(x1==0){
y1=fabs(n-m)/2+1;
}
if(m%2==1&&n%2==0){
if(m<n){
y1=(n-(m+1))/2;
}else{
y1=((n+1)-m)/2;
}
}
if(n%2==1&&m%2==0){
if(n<m){
y1=(m-(n+1))/2;
}else{
y1=((m+1)-n)/2;
}
}
res=x1+y1;
}
if(w==10000){
res=fabs(n-m);
}
printf("%d",res);
}