首页 > 其他 > 详细

2016 China Final H - Great Cells

时间:2017-12-02 20:53:52      阅读:286      评论:0      收藏:0      [点我收藏+]
/*************************************************************************
    > File Name: H.cpp
    > Author: LyuCheng
    > Created Time: 2017-12-02 19:29
    > Description: 
        题意:一个n×m的矩阵,填[1,k]的数,一个格子如果是所在行,列,严格最
            的,那么这个格子叫做Great cell,求segma(g=0...n*m)((g+1)*Ag)
            Ag是有g个Great cell的填法
        思路:式子化简为 segma(g=0...n*m)(g*Ag)+segma(g=0..n*m)(Ag);
            后一项就是所有Ag的和,也就是总的状态为 k^(n+m),前一项为
            segma(g=0...n*m)(Ag+Ag+...Ag)(总共有g个) 也就是说每一个方案数
            里面有g个Great cell,每一个Great cell对总结果贡献1,所以,
            最后就是 所有格子作为Great cell的情况的总和
 ************************************************************************/

#include <bits/stdc++.h>

#define MOD 1000000007
#define LL long long

using namespace std;

int t;
int n,m,k;
LL res;

inline LL power(LL a,LL b){
    if(b==0)
        return 1;
    LL cnt=power(a,b/2);
    cnt=cnt*cnt%MOD;
    if(b&1) cnt=cnt*a%MOD;
    return cnt;    
}

inline void init(){
    res=0;
}

int main(){
    scanf("%d",&t);
    for(int ca=1;ca<=t;ca++){
        printf("Case #%d: ",ca);    
        init();
        scanf("%d%d%d",&n,&m,&k);
        if(n==1&&m==1){
            printf("%d\n",2*k);
            continue;
        }
        res+=power(k,n*m);
        res%=MOD;
        for(int i=1;i<=k;i++){
            res+=((n*m)%MOD*power(i-1,n+m-2)%MOD*power(k,(n-1)*(m-1))%MOD)%MOD;
            res%=MOD;
        }
        printf("%d\n",res);    
    }
    return 0;
}

 

2016 China Final H - Great Cells

原文:http://www.cnblogs.com/wuwangchuxin0924/p/7955434.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!