盈皓天 2024-09-10 13:31 采纳率: 50%
浏览 2
已结题

csp贪吃蛇为啥是错的呢

csp的贪吃蛇代码如下

#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
const int N=1e6+100,INF=1e9;
struct Node
{
    int val,num;
    #define val(i) a[i].val
    #define num(i) a[i].num
    bool operator < (const Node y)
    {
        return val==y.val?num<y.num:val<y.val;
    }
    bool operator == (const Node y)
    {
        return val==y.val && num==y.num;
    }
}a[N];
int T,n,k,ph,pb;
queue<Node> q;
Node blank={0,0},black={INF,INF};
Node Max(Node x,Node y)
{
    return (x<y)?y:x;
}
Node Min(Node x,Node y)
{
    return (x<y)?x:y;
}
bool query(Node la)
{
    int cnt=0;
    Node bk=Min(pb<ph?a[pb+1]:black,q.size()?q.back():black);
    while(1)
    {
        Node hd=Max(pb<ph?a[ph]:blank,q.size()?q.front():blank);
        if(a[ph]==hd)
            ph--;
        else
            if(q.size())
                q.pop();
        if(hd==bk)
            break;
        hd.val-=la.val;
        if(bk<hd)
            break;
        la=hd;cnt++;
    }
    return cnt&1;
}
int main()
{
    scanf("%d",&T);
    for(int i=1;i<=T;i++)
    {
        if(i==1)
        {
            scanf("%d",&n);
            for(int j=1;j<=n;j++)
                scanf("%d",&val(j)),num(j)=j;
        }
        else
        {
            scanf("%d",&k);
            for(int j=1,x,y;j<=k;j++)
            {
                scanf("%d%d",&x,&y);
                val(x)=y;
            }
        }
        ph=n,pb=1;
        while(q.size())
            q.pop();
        while(pb<=ph)
        {
            Node x=Max((ph>pb)?a[ph]:blank,q.size()?q.front():blank);
            if(a[ph]==x)
                ph--;
            else
                q.pop();
            x.val-=val(pb);
            if(x<a[pb+1] && n-pb>1)
            {
                if(query(x))
                    pb++;
                break;
            }
            q.push(x);pb++;
        }
        printf("%d\n",n-pb+1);
    }
    return 0;
}

为什么只得了74.5分呢!?

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-10 19:01
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    首先,我需要指出的是,对于代码的评判并不只取决于能否得到正确答案,还包括代码的可读性、效率、错误处理等多个方面。针对你的代码,我可以给出以下几点可能的改进和建议:

    1. 代码的可读性:你的代码包含大量的宏定义和结构体定义,使得代码的可读性降低。建议尽可能简化代码结构,避免使用过于复杂的宏定义和结构体嵌套。同时,尽量使用清晰易懂的变量命名方式,使得代码更加易于理解。

    2. 代码的效率:你的代码中包含大量的循环和条件判断,可能导致程序的运行效率低下。可以尝试优化算法,减少不必要的循环和判断,提高程序的运行效率。此外,需要注意数据类型的选择和数据结构的优化等。

    3. 错误处理:在代码中缺少必要的错误处理机制,可能导致程序在某些情况下出现错误或异常。应该增加必要的错误处理机制,使得程序更加健壮和可靠。

    具体到你的代码得分不高的问题,由于我并没有完整的评分标准和具体的测试结果,因此无法确定具体的问题所在。但是我可以根据代码结构和算法实现提出一些可能存在的问题和改进建议:

    • 你的算法中可能存在逻辑错误或理解题目要求不够深入的问题。贪吃蛇题目的关键在于维护一个不会让蛇吃自身的方向列表(通常是使用deque存储方向的转变),然后根据列表控制蛇的移动方向。你的代码中似乎并没有实现这样的逻辑。
    • 你的代码中存在一些不必要的操作和冗余的代码,这些可能导致程序运行效率低下或者逻辑错误。建议简化代码结构,去除不必要的操作和冗余的代码。
    • 你的代码中可能存在一些边界条件处理不当的问题。在编写程序时需要注意处理各种边界条件,避免出现异常情况导致程序出错或崩溃。

    综上所述,你需要仔细审查你的代码结构和算法实现,找出可能存在的问题并进行改进和优化。同时,你也可以参考其他优秀的解决方案或者向其他开发者请教,以提高代码的质量和效率。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月12日
  • 已采纳回答 12月4日
  • 创建了问题 9月10日