社区讨论

蒟蒻求助与或和

P5300[GXOI/GZOI2019] 与或和参与者 2已保存回复 1

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@lo8fb025
此快照首次捕获于
2023/10/27 17:40
2 年前
此快照最后确认于
2023/10/27 17:40
2 年前
查看原帖
CPP
#include <stdio.h>
#include <string.h>
int n;
int ans;
int height[1005];
int stack[1005];
bool matrix[32][1005][1005];
int main()
{
    scanf("%d",&n);
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=n; j++)
        {
            int k;
            scanf("%d",&k);
            for(int bit=0; bit<32; bit++)
            {
                matrix[bit][i][j]=k&1;
                k>>=1;
            }
        }
    }

    for(int bit=0;bit<32;bit++){
        memset(height,0,sizeof height);
        int temp=0;
        for(int i=1;i<=n;i++){
            int top=0;
            for(int j=1;j<=n;j++){
                height[j]=matrix[bit][i][j]?height[j]+1:0;
                temp+=matrix[bit][i][j];
                while(top && height[stack[top]]>=height[j]){
                    temp-=(stack[top]-stack[top-1])*(height[j]-height[stack[top]]);
                    top--;
                }
                stack[++top]=j;
            }
        }
        ans+=temp*(1<<bit);
//        printf("%d ",ans);
    }
    printf("%d ",ans);
    return 0;
}


这里的代码没写全,只写了与运算和,但是不对qaq

回复

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

正在加载回复...