diff --git a/HDOJ/5725_summer_via.cpp b/HDOJ/5725_summer_via.cpp new file mode 100644 index 0000000..1aed19b --- /dev/null +++ b/HDOJ/5725_summer_via.cpp @@ -0,0 +1,114 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#pragma comment(linker,"/STACK:1024000000,1024000000") +using namespace std; +#define INF 0x3f3f3f3f +int n,m; +long long dp[1005][1005]; +long long dp2[505][505]; +char mp[1005][1005]; +//n*m的图,计算以(1,1)为起点到所有曼哈顿距离和 +long long get(long long n,long long m) +{ + return m*(m-1)*n/2+n*(n-1)*m/2; +} +//n*m的图,计算任意点到所有点的曼哈顿距离和 +long long get2(long long x,long long y) +{ + return get(x,y)+get(n-x+1,y)+get(x,m-y+1)+get(n-x+1,m-y+1)-(get(1,x)+get(1,y)+get(1,n-x+1)+get(1,m-y+1)); +} +int xx[1005],yy[1005],cnt2; +int pr[1005],pc[1005]; +int main() +{ + int t; + scanf("%d",&t); + while(t--) + { + cnt2=0; + scanf("%d%d",&n,&m); + long long up=(long long)m*n*(m*n-1)*(m+n)/3,down=0; + int cnt=0; + memset(pr,-1,sizeof pr); + memset(pc,-1,sizeof pc); + getchar(); + for(int i=0;ipr[i-1]) suml+=pr[i]; + else suml=pr[i]; + up+=4ll*suml*(m-pr[i]-1); + } + else suml=0; + if(pr[i]!=-1) + { + if(i==0||pr[i]pc[i-1]) sumu+=pc[i]; + else sumu=pc[i]; + up+=4ll*sumu*(n-pc[i]-1); + } + else sumu=0; + if( + pc[i]!=-1) + { + if(i==0||pc[i]