2017 多校训练第二场 HDU 6052 To my boyfriend

来源:互联网 发布:婚纱摄影 知乎 编辑:程序博客网 时间:2024/06/17 20:46
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=105;int num[maxn][maxn];int n,m;ll cal(int x, int y) {    ll res=0;    int c=num[x][y],L=1,R=m;    for (int i=x;i>=1;i--) {        if(i<x&&num[i][y]==c) break;        int l=y,r=y;        for(int j=y-1;j>=max(1,L);j--) {            if(num[i][j]==c) break;            l=j;        }        L=max(L,l);        if(i==x){            res+=(ll)(n-x+1LL)*(y-L+1LL)*(R-y+1LL);            continue;        }        for(int j=y+1;j<=min(m,R);j++) {            if(num[i][j]==c) break;            r=j;        }        R=min(R,r);        res+=(ll)(n-x+1LL)*(y-L+1LL)*(R-y+1LL);    }    //printf("(%d, %d) %I64d\n", x, y, res);    return res;}int main(int argc, char const *argv[]){int T;scanf("%d",&T);while(T--){scanf("%d %d",&n,&m);ll cnt=0;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cnt+=(i*j);scanf("%d",&num[i][j]);}}ll kkk=0;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){kkk+=cal(i,j);}}printf("%.9f\n",kkk*1.0/cnt);}return 0;}

原创粉丝点击