纯C代码,5,6测试点未通过,抱着极小的希望找好心人帮帮,给个测试数据也行
查看原帖
纯C代码,5,6测试点未通过,抱着极小的希望找好心人帮帮,给个测试数据也行
389268
LeM0NAdE楼主2021/8/25 21:09

实在找不到错了,我是菜鸡 代码如下:好人一生平安!

// P1135 奇怪的电梯 BFS
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int n,arr[520],q[520],f,r;
int temp[520];
//写一个循环队列[f,r)左闭右开的区间
int step;
const int qSize=200;
int main(){
    int a,b,i,j,tmp1,tmp2;
    int ans = 0x3f3f3f3f;
    scanf("%d%d%d",&n,&a,&b);
    for(i=1;i<=n;i++){
        scanf("%d",&arr[i]);
    }
    q[r%qSize]=a,r++,tmp1=a,tmp2=a;
    while (r-f>0)
    {
        for(i=0;i<r-f;i++){
            temp[i]=q[(f+i)%qSize];
        }
        step++;
        for(j=0;j<i;j++){
            tmp1=tmp2=temp[j];
            if(tmp1==b){
                ans=step-1;
                break;
            }
            if(tmp1+arr[temp[j]]<=n && tmp1+arr[temp[j]]!=b){
                tmp1+=arr[temp[j]];
                q[r%qSize]=tmp1;
                r=(r+1)%qSize;
            }
            if(tmp2-arr[temp[j]]>=1 && tmp2-arr[temp[j]]!=b){
                tmp2-=arr[temp[j]];
                q[r%qSize]=tmp2;
                r=(r+1)%qSize;
            }
            if(tmp1+arr[temp[j]]==b){
                ans=step;
                break;
            }
            if(tmp2-arr[temp[j]]==b){
                ans=step;
                break;
            }
        }
        f=(f+i)%qSize;
    }
    if(ans == 0x3f3f3f3f){
        printf("-1");
    }
    else{
        printf("%d",ans);
    }
    return 0;
}

2021/8/25 21:09
加载中...