zoukankan      html  css  js  c++  java
  • CF1228E Another Filling the Grid

    题目链接

    问题分析

    比较显见的容斥,新颖之处在于需要把横竖一起考虑……

    可以枚举没有(1)的行数和列数,答案就是

    [sumlimits_{i=0}^nsumlimits_{j=0}^m(-1)^{i+j}{nchoose i}{n choose j}(k-1)^{i*n+j*n-i*j}k^{n*n-i*n-j*n+i*j} ]

    个数算对就好了……

    参考程序

    #include <bits/stdc++.h>
    #define LL long long
    using namespace std;
     
    const LL Mod = 1000000007;
    const LL Maxn = 260;
    LL n, k;
    LL Fact[ Maxn ], INV[ Maxn ];
     
    LL Pow( LL x, LL y ) {
    	LL Ans = 1;
    	for( ; y; y >>= 1, x = x * x % Mod )
    		if( y & 1 )
    			Ans = Ans * x % Mod;
    	return Ans;
    }
     
    LL C( LL n, LL m ) {
    	return Fact[ n ] * INV[ m ] % Mod * INV[ n - m ] % Mod;
    }
     
    int main() {
    	Fact[ 0 ] = 1;
    	for( LL i = 1; i < Maxn; ++i ) Fact[ i ] = Fact[ i - 1 ] * i % Mod;
    	INV[ Maxn - 1 ] = Pow( Fact[ Maxn - 1 ], Mod - 2 );
    	for( LL i = Maxn - 2; i >= 0; --i ) INV[ i ] = INV[ i + 1 ] * ( i + 1 ) % Mod;
     
    	scanf( "%lld%lld", &n, &k );
    	LL Ans = 0;
    	for( LL i = 0; i <= n; ++i )
    		for( LL j = 0; j <= n; ++j ) {
    			LL Num = ( i + j ) * n - i * j;
    			LL t1 = C( n, i ) * C( n, j ) % Mod;
    			LL Method = t1 * Pow( k - 1, Num ) % Mod * Pow( k, n * n - Num ) % Mod;
    			if( ( i + j ) % 2 == 0 ) Ans = ( Ans + Method ) % Mod; 
    			else Ans = ( Ans + Mod - Method ) % Mod;
    		}
    	printf( "%lld
    ", Ans );
    	return 0;
    }
    
    
  • 相关阅读:
    微信端video去除最顶层播放
    MVC错误页面相关说明
    sublime使用
    linux或Mac下手动回滚代码
    用Python操作git命令
    利用pyinstaller打包加密Python项目
    进程、线程和协程的结合使用
    模块导入失败问题
    递归调用解压zip包或rar包
    随机验证码&发红包
  • 原文地址:https://www.cnblogs.com/chy-2003/p/11617511.html
Copyright © 2011-2022 走看看