hdu 5245Joyful 容斥

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
/*
  就是n*m的格子,然后有一种超级刷子,可以随机选两个坐标,然后坐标作为顶点的矩形都被染色,
  这个刷子可以用k次,求被刷格子的期望,注意,随机的两个坐标,可以选一个格子
  考虑每个格子对期望的贡献p,那么1-(1-p)^k就是这个格子的总贡献
  求p不好求,发现1-p比较好求,考虑(x,y),这个格子不被选,那么两个随机格子,要么都在上,下左右
  四个矩形里,然后统计和,减去被重复计算的四个角,就是答案了
*/ ll sqr(ll a,ll b){ return a*a*b*b; } int main(){ int t,n,m,k,cas=1; scanf("%d",&t); while(t--){ scanf("%d%d%d",&n,&m,&k); double res=0; ll t=(ll)n*n*m*m; for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){ ll tt=0; tt+=sqr(m,n-i);// tt+=sqr(n,m-j);// tt+=sqr(n,j-1);// tt+=sqr(m,i-1);// tt-=sqr(n-i,m-j);// tt-=sqr(i-1,m-j);// tt-=sqr(n-i,j-1); tt-=sqr(i-1,j-1);// double ttt=1.0*tt/t; ttt=1.0-pow(ttt,k); //cout<<ttt<<endl; res+=ttt; } int ans=(int)round(res); printf("Case #%d: %d ",cas++,(int)round(res)); } return 0; }

  

原文地址:https://www.cnblogs.com/jihe/p/6788822.html