码迷,mamicode.com
首页 > 其他好文 > 详细

2016 China Final H - Great Cells

时间:2017-12-02 21:07:58      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:line   ini   desc   状态   auth   for   file   init   clu   

/*************************************************************************
    > 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

标签:line   ini   desc   状态   auth   for   file   init   clu   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!