Lacer @ 2019-02-26 17:13:24
和某一篇题解撞脸请忽视
一开始N定义为55 直接RE一大片
后来学题解改成了2010就A了
求解
#include<cstdio>
#include<cstring>
#define N 2010
int s[N][N],d[11111111];
int main()
{
int n,i,j,x,y;
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++){
scanf("%d",&s[i][j]);
s[i][j]+=s[i-1][j]+s[i][j-1]-s[i-1][j-1];
}
int ans=0;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++){
for(x=1;x<=i;x++)
for(y=1;y<=j;y++)
d[s[i][j]-s[x-1][j]-s[i][y-1]+s[x-1][y-1]]++;
for(x=i+1;x<=n;x++)
for(y=j+1;y<=n;y++)
ans+=d[s[x][y]-s[x][j]-s[i][y]+s[i][j]];
for(int x=1;x<=i;x++)
for(int y=1;y<=j;y++)
d[s[i][j]-s[i][y-1]-s[x-1][j]+s[x-1][y-1]]=0;
for(x=1;x<=i;x++)
for(y=j+1;y<=n;y++)
d[s[i][y]-s[x-1][y]-s[i][j]+s[x-1][j]]++;
for(x=i+1;x<=n;x++)
for(y=1;y<=j;y++)
ans+=d[s[x][j]-s[x][y-1]-s[i][j]+s[i][y-1]];
for(int x=1;x<=i;x++)
for(int y=j+1;y<=n;y++)
d[s[i][y]-s[x-1][y]-s[i][j]+s[x-1][j]]=0;
}
printf("%d",ans);
return 0;
}
//long long
by t162 @ 2019-02-26 17:18:10
这还叫撞脸吗,这简直一模一样
by Lacer @ 2019-02-26 17:21:43
@Bambusoideae 用这个思路只能打成这个风了。。。
by YingLi @ 2019-10-23 19:15:14
我N开100,也是RE……开1e3就能过。好迷啊
by shyyhs @ 2020-08-14 14:15:06
因为数据范围太小把N^6的都放过去了,结果它改了数据范围,没改题面