社区讨论
蒟蒻求助与或和
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 条回复,欢迎继续交流。
正在加载回复...