zoukankan      html  css  js  c++  java
  • 【Codechef】CNTL

    题面

    vjudge

    题解

    第一问直接考虑一下(N,K)的奇偶性即可,当他们奇偶性相同,答案就是(2^K-1),否则是(2^K-2)

    第二问因为是排列问题考虑指数型生成函数,那么当答案为(2^K-1)时,答案为([x^n](frac{e^x-e^{-x}}{2})^K),否则为([x^n][(frac{e^x-e^{-x}}{2})^{K-1} imes frac{e^x+e^{-x}}{2}])

    最后把这两个式子二项式展开一下就完事儿了。

    代码

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring> 
    #include <cmath> 
    #include <algorithm>
    using namespace std; 
    inline int gi() {
        register int data = 0, w = 1;
        register char ch = 0;
        while (!isdigit(ch) && ch != '-') ch = getchar(); 
        if (ch == '-') w = -1, ch = getchar(); 
        while (isdigit(ch)) data = 10 * data + ch - '0', ch = getchar(); 
        return w * data; 
    } 
    const int Mod = 1e9 + 7; 
    const int MAX_N = 1e5 + 5; 
    int fpow(int x, int y) { 
    	int res = 1; 
    	while (y) { 
    		if (y & 1) res = 1ll * res * x % Mod; 
    		x = 1ll * x * x % Mod; 
    		y >>= 1; 
    	} 
    	return res; 
    } 
    int N = 1e5, K, fac[MAX_N], ifc[MAX_N]; 
    int C(int n, int m) {
    	if (n < 0 || m < 0 || n < m) return 0;
    	else return 1ll * fac[n] * ifc[m] % Mod * ifc[n - m] % Mod; 
    } 
    
    int main () { 
    	fac[0] = 1; for (int i = 1; i <= N; i++) fac[i] = 1ll * fac[i - 1] * i % Mod; 
    	ifc[N] = fpow(fac[N], Mod - 2); 
    	for (int i = N - 1; ~i; i--) ifc[i] = 1ll * ifc[i + 1] * (i + 1) % Mod; 
    	int Q = gi(); 
    	while (Q--) { 
    		N = gi(), K = gi(); 
    		if ((N ^ K) & 1) { 
    			int ans = 0; 
    			for (int i = 0, op = fpow(Mod - 1, K - 1); i < K; i++, op = Mod - op) 
    				ans = (ans + 1ll * op * C(K - 1, i) % Mod *
    					   (fpow(2 * i - K + 2 + Mod, N) + fpow(2 * i - K + Mod, N))) % Mod; 
    			printf("%d %lld
    ", fpow(2, K) - 2, 1ll * ans * fpow(fpow(2, K), Mod - 2) % Mod); 
    		} else { 
    			int ans = 0; 
    			for (int i = 0, op = fpow(Mod - 1, K); i <= K; i++, op = Mod - op)
    				ans = (ans + 1ll * op * C(K, i) % Mod * fpow(2 * i - K + Mod, N)) % Mod; 
    			printf("%d %lld
    ", fpow(2, K) - 1, 1ll * ans * fpow(fpow(2, K), Mod - 2) % Mod); 
    		} 
    	} 
        return 0; 
    } 
    
  • 相关阅读:
    centos : 创建交换分区
    用法记录
    mysql日志清理
    mysql 通过查看mysql 配置参数、状态来优化你的mysql
    [WPF 自定义控件]Window(窗体)的UI元素及行为
    [WPF 自定义控件]为Form和自定义Window添加FunctionBar
    [WPF 自定义控件]让Form在加载后自动获得焦点
    [WPF 自定义控件]简单的表单布局控件
    [WPF 自定义控件]以Button为例谈谈如何模仿Aero2主题
    [WPF 自定义控件]自定义控件的代码如何与ControlTemplate交互
  • 原文地址:https://www.cnblogs.com/heyujun/p/12202156.html
Copyright © 2011-2022 走看看