社区讨论

c,60分 3和4超时了,不知道怎么优化了,帮帮,感谢!!

P1002[NOIP 2002 普及组] 过河卒参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lo33g3gk
此快照首次捕获于
2023/10/24 00:10
2 年前
此快照最后确认于
2023/10/24 00:10
2 年前
查看原帖
C
#include<stdio.h>
#include<math.h>

int mymep[25][25]={};
long long set=0;//这里用的全局收集结果,省的往回传了

int getset(int x,int y,int hx,int hy);

int main()
{
    int myx,myy,hx,hy;
    scanf("%d%d%d%d",&myx,&myy,&hx,&hy);
    getset(myx+1,myy+1,hx+1,hy+1);
    printf("%lld",set);
    return 0;
}
int getset(int x,int y,int hx,int hy)
{
    if(x==1&&y==1)//回到原点 算一次
    {
        set++;
        return 0;
    }
    else if(fabs(x-hx)<=2 && fabs(y-hy)<=2)//用距离来先筛一次,(感觉没有鸟用)
    {
        if(((x-hx)*(x-hx)+(y-hy)*(y-hy))==5 || (x==hx && y==hy))//(再拿具体距离再筛一次)
        {
            return 0;
        }
    }//这里如果没事就继续递归
    if(x>1)
    getset(x-1,y,hx,hy);
    if(y>1)
    getset(x,y-1,hx,hy);
}

回复

0 条回复,欢迎继续交流。

正在加载回复...