最近练习BFS,看某位大神博客的小结跟着做来着,然后碰到这个...就是跳马的问题.没给出棋盘,就是说没有范围,n,m可以很大,用BFS数据大一点看着很慢,感觉肯定是过不了,大神博客写着:之前需要逼近下,然后再搜索,或者直接枚举判断下就行了。...俩都不会,无法,看看怎么逼近,尝试一小时还是不会。找个数学大神看看有啥规律可循没有。推出来公式之后一直WA....拿着原先的搜索对照测试结果一样不理解...万万没想到啊万万没想到,卧槽换了一种输入方式就AC了...心中万只草泥马奔腾而过啊,一晚上的时间啊 全部浪费这个题了...
题目几个比较坑的地方:范围真的很大,最起码32M内存你开不起。跳马可以跳到坐标是负的地方- -只能说卧槽.还有就是有几个点要单独处理。附上代码:
#include<stdio.h>
#include<string.h>
int main()
{
char c[20];
while(scanf("%s",c),c[0]!='E')
{
int x=0,y,flag=1;
int k;
for(int i=0;c[i];i++)
{
if(c[i]=='-'&&i==0)
flag=-1;
else
x=x*10+c[i]-48;
}
x=x*flag;
scanf("%d",&y);
if(x<0)
x=-x;
if(y<0)
y=-y;
if(y<x) {k=x;x=y;y=k;}
if(y<=2*x)
{
if(x==1&&y==1)
printf("2\n");
else if(x==2&&y==2)
printf("4\n");
else
printf("%d\n",(x+y)/3+(x+y)%3);
}
else
{
int ans=x;
int c=(y-2*x)%4;
ans+=c;
ans+=(y-2*x-c)/2;
if(y==1&&x==0)
ans=3;
printf("%d\n",ans);
}
}
return 0;
}