#include<cstdio>
#include<map>
int diff[2002][2002];
inline int scan(void){
int minus=1;
int number=0;
char got=getchar();
while('9'<got||got<'0'){
if(got=='-'){
minus=-1;
};
got=getchar();
};
while('0'<=got&&got<='9'){
number=number*10+got-'0';
got=getchar();
};
return number*minus;
};
inline void print(int answer){
if(answer<0){
putchar('-');
answer=-answer;
};
if(answer>9){
print(answer/10);
};
putchar(answer%10+'0');
};
int main(int argc,char **argv){
std::map<int,int> hash;
int maxn=scan(),ans=0;
for(int row=1;row<=maxn;row++){
for(int col=1;col<=maxn;col++){
int worth=scan();
diff[row][col]=diff[row-1][col]+diff[row][col-1]-diff[row-1][col-1]+worth;
}
}
for(int row=1;row<=maxn;row++){
for(int col=1;col<=maxn;col++){
for(int rowit=1;rowit<=row;rowit++){
for(int colit=1;colit<=col;colit++){
hash[diff[row][col]-diff[row][colit-1]-diff[rowit-1][col]+diff[rowit-1][colit-1]]++;
};
};
for(int rowit=row+1;rowit<=maxn;rowit++){
for(int colit=col+1;colit<=maxn;colit++){
ans=ans+hash[diff[rowit][colit]-diff[rowit][col]-diff[row][colit]+diff[row][col]];
};
};
for(int rowit=1;rowit<=row;rowit++){
for(int colit=1;colit<=col;colit++){
hash[diff[row][col]-diff[row][colit-1]-diff[rowit-1][col]+diff[rowit-1][colit-1]]=0;
};
};
for(int rowit=1;rowit<=row;rowit++){
for(int colit=col+1;colit<=maxn;colit++){
hash[diff[row][colit]-diff[rowit-1][colit]-diff[row][col]+diff[rowit-1][col]]++;
};
};
for(int rowit=row+1;rowit<=maxn;rowit++){
for(int colit=1;colit<=col;colit++){
ans=ans+=hash[diff[rowit][col]-diff[row][col]-diff[rowit][colit-1]+diff[row][colit-1]];
};
};
for(int rowit=1;rowit<=row;rowit++){
for(int colit=col+1;colit<=maxn;colit++){
hash[diff[row][colit]-diff[rowit-1][colit]-diff[row][col]+diff[rowit-1][col]]=0;
};
};
};
};
print(ans);
return 0;
};
就一个TLE了,还能再加速吗?