1. 程式人生 > 實用技巧 >leetcode刷題-75顏色分類

leetcode刷題-75顏色分類

連結 :http://codeforces.com/contest/1391/problem/C

題解 :一開始 腦殘了去推組合數,然後忘了這個東西

然後去網上找了線性推組合數的板子wa了 我吐了。 我純NT

其實一共N個數的排列,考慮N的位置,然後考慮兩邊的數,兩邊的數只要有一邊不按升序或者降序排列就可以了 然後就是一堆組合數就行了

#include<bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<=n;++i)
#define per(i,a,n) for(int i=n;i>=a;--i)
#define pb push_back
#define
fi first #define se second #define io std::ios::sync_with_stdio(false) using namespace std; typedef long long ll; typedef pair<int,int> pii; const int P = 1e9+7, INF = 0x3f3f3f3f; ll gcd(ll a,ll b) { return b?gcd(b,a%b):a; } ll qpow(ll a,ll n) { ll r=1%P; for (a%=P; n; a=a*a%P,n>>=1
)if(n&1)r=r*a%P; return r; } int main() { ll ans1=1; int n; cin>>n; for(int i=1;i<=n;i++) ans1*=i,ans1%=P; ans1=(ans1-qpow(2,n-1)+P)%P; cout<<ans1<<endl; }