Game (思维)
#include<bits/stdc++.h> using namespace std; const int maxn = 1007; char str[maxn][maxn]; int cntx[maxn], cnty[maxn],x[maxn],y[maxn]; int main(void){ int T,n,m;scanf("%d",&T); while(T --){ scanf("%d%d",&n,&m); int tot = 0; memset(cntx, 0, sizeof(cntx)); memset(cnty, 0, sizeof(cnty)); memset(x, -1, sizeof(x)); memset(y, -1, sizeof(y)); for(int i = 0; i < n; i ++){ scanf("%s", str[i]); for(int j = 0; j < m; j ++){ if(str[i][j] == '#'){ cntx[i] ++;cnty[j] ++; tot ++; }else{ x[i] = j;y[j] = i; } } } long long ans = 0; for(int i = 0; i < n; i ++) for(int j = i + 1; j < n; j ++) ans += (long long)(j - i) * cntx[i] * cntx[j] * 2; for(int i = 0; i < m; i ++) for(int j = i + 1; j < m; j ++) ans += (long long)(j - i) * cnty[i] * cnty[j] * 2; int cnt = 0; for(int i = 0; i < n; i ++){ if(x[i] == -1) cnt = 0; else if(i == 0 || x[i] <= x[i - 1]) cnt = x[i]; else cnt += x[i]; if(x[i] != -1) ans += 4LL * cnt * (m - x[i] - 1); } cnt = 0; for(int i = 0; i < n; i ++){ if((i == 0)||(x[i] > x[i - 1])||(x[i] == -1)) cnt = m - x[i] - 1; else cnt += m - x[i] - 1; if(x[i] >= 0) ans += 4LL * (cnt - m + x[i] + 1) * (x[i]>0?x[i]:0); } cnt = 0; for(int i = 0; i < m; i ++){ if(y[i] == -1) cnt = 0; else if(i == 0 || y[i] <= y[i - 1]) cnt = y[i]; else cnt += y[i]; ans += 4LL * cnt * (n - y[i] - 1); } cnt = 0; for(int i = 0; i < m; i ++){ if((i == 0)||(y[i] > y[i - 1])||(y[i] == -1)) cnt = n - y[i] - 1; else cnt += n - y[i] - 1; if(y[i] >= 0) ans += 4LL * (cnt - n + y[i] + 1) * (y[i]>0?y[i]:0); } printf("%.4lf\n",(double)ans/tot/tot); } return 0; }
more crazy more get!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· 程序员转型AI:行业分析
· 深入集成:使用 DeepSeek SDK for .NET 实现自然语言处理功能
· 为DeepSeek添加本地知识库
· .NET程序员AI开发基座:Microsoft.Extensions.AI