• codeforces 1391C


    如果 (a_i) 两边有比 (a_i) 大的数,那么 i 必会向两边连边,
    同时又因为 (a_i) 两边相邻的比 (a_i) 大的数的位置必然会相互连边,所以就构成一个三元环。

    考虑有环的情况太复杂,所以转为考虑无环的情况:
    (a_i) 两边不能同时有比自己大的数,所以整个数列就构成了一个单峰函数。
    于是将最大的数(n)拿出来,剩下的数或在左边,或在右边,
    最终答案就为:

    [n!-2^{n-1} ]

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    #include<cmath>
    #include<stack>
    #include<queue>
    using namespace std;
    typedef long long ll;
    
    const int maxn = 1000010;
    const int mod = 1000000007;
    
    int n;
    
    ll qsm(ll i,ll po){
    	ll res = 1ll;
    	while(po){
    		if(po&1) res = 1ll * res * i % mod;
    		po >>=1 ;
    		i = 1ll * i * i % mod;
    	}
    	return res;
    }
    
    ll read(){ ll s=0,f=1; char ch=getchar(); while(ch<'0' || ch>'9'){ if(ch=='-') f=-1; ch=getchar(); } while(ch>='0' && ch<='9'){ s=s*10+ch-'0'; ch=getchar(); } return s*f; }
    
    int main(){
    	n = read();
    	ll jie = 1ll;
    	for(int i=1;i<=n;i++) jie = 1ll * jie * i % mod;
    	
    	jie = (((jie - qsm(2,n-1)) % mod) + mod) % mod;
    	
    	printf("%d
    ",jie);
    	
    	return 0;
    }
    
  • 相关阅读:
    浅谈vue对seo的影响
    JavaScript this 关键字
    css3新增特性
    JavaScript 严格模式(use strict)
    let,var,const的区别
    vue slot内部组件插槽
    正则表达式的字母意义
    Array数组对象的方法
    ArcGis for js React 初始化安装
    HTML 基础
  • 原文地址:https://www.cnblogs.com/tuchen/p/13799821.html
Copyright © 2020-2023  润新知