• CF838D Airplane arrangement


    • 原题链接:CF838D
    • 感觉很妙的一道组合数学题

    (solution)

    • 考虑连链为环,开一个虚点(n+1),并连接无向边((1,n+1),(n,n+1)),于是原图变成了一个环
    • 注意到这样下来每个人任意选择位置,任意选择方向最终都会停留在环的一些位置上,我们把这些位置当作集合(S)
    • 那么方案不合法当且仅当(n + 1 in S)
    • 考虑这个环每个位置完全等价,所以所有(S)出现的概率都相等,于是有(frac{inom{n}{m}}{inom{n+1}{m}})的概率合法
    • 不考虑合法,总方案是(2 ^ m * (n + 1) ^ m)
    • 乘起来即可
      代码非常短
    #include<bits/stdc++.h>
    using namespace std;
    int read(){
    	char c = getchar();
    	int x = 0;
    	while(c < '0' || c > '9')	c = getchar();
    	while(c >= '0' && c <= '9')	x = x * 10 + c - 48,c = getchar();
    	return x;
    }
    const int mod = 1e9 + 7; 
    int qpow(int x,int y){
    	int ans = 1;
    	while(y){
    		if(y & 1)	ans = 1ll * ans * x % mod;
    		x = 1ll * x * x % mod;
    		y >>= 1;
    	}
    	return ans;
    }
    int main(){
    	int n = read(),m = read();
    	printf("%lld
    ",1ll * qpow(2,m) * qpow(n+1,m-1) % mod * (n - m + 1) % mod);
    	return 0;
    }
    
  • 相关阅读:
    Centos6.8通过yum安装mysql5.7
    查看mysql已安装
    canal client leader
    es按时间段统计总数
    nginx负载
    es 查看mapping 设置max_result_window
    es 修改默认bool条件个数
    less
    Less配置环境
    JavaScript面向对象与原型
  • 原文地址:https://www.cnblogs.com/y-dove/p/14736942.html
Copyright © 2020-2023  润新知