关于max的神秘语法

学术版

Dream__Sky @ 2023-12-02 20:55:54

在有一道题中,

我这么写f[i][j][now^1]=max({f[i][j][now],f[i+len/2][j][now],f[i+len/2][j+len/2][now],f[i+len/4][j][now],f[i+len/2][j+len/4][now],f[i+len/4][j+len/4][now]});过了

但是从中间某个数开始,分成两句取max就错了(中间没问题)。

这是为什么


by gfgoodluck @ 2023-12-02 21:06:49

因为是UB?


by liangbowen @ 2023-12-02 21:16:20

下次请把完整的错误代码放出来。。。。你分开两次取 max,第二次的 max 直接把第一次的覆盖了,显然会寄啊


by Dream__Sky @ 2023-12-02 21:26:03

@liangbowen

while(len*2<m)
    {
        len*=2;
        for(int i=1;i+len-1<=n;i++)
        {
            for(int j=1;j<=i;j++)
            {
                f[i][j][now^1]=max({f[i][j][now],f[i+len/2][j][now],f[i+len/2][j+len/2][now]});
                f[i][j][now^1]=max({f[i+len/4][j][now],f[i+len/2][j+len/4][now],f[i+len/4][j+len/4][now]});
            }
        } 
        now^=1; 
    }

by liangbowen @ 2023-12-02 21:33:10

你两个代码,对的那个是

ans=max(a,b);
ans=max({ans,x,y});
cout<<ans;

错的那个是

ans=max(a,b);
ans=max(x,y);
cout<<ans;

显然不一样啊,建议下次脑子不清醒的时候休息一下(


|