Submission #19922

#TimeUsernameProblemLanguageResultExecution timeMemory
19922tncks0121순열 (kriii4_T)C++14
100 / 100
97 ms24636 KiB
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <memory.h> #include <math.h> #include <assert.h> #include <stack> #include <queue> #include <map> #include <set> #include <algorithm> #include <string> #include <functional> #include <vector> #include <deque> #include <utility> #include <bitset> #include <limits.h> #include <time.h> #include <functional> #include <numeric> using namespace std; typedef long long ll; typedef unsigned long long llu; typedef double lf; typedef unsigned int uint; typedef long double llf; typedef pair<int, int> pii; typedef pair<ll, int> pli; #define debug(format, ...) printf(format, __VA_ARGS__); const ll MOD = (ll)1e9 + 7; ll modpow (ll a, ll b) { a %= MOD; ll ret = 1; while(b > 0) { if(b & 1) ret = (ret * a) % MOD; a = (a * a) % MOD; b >>= 1; } return ret; } struct mint { ll val; mint(ll val = 0): val((val % MOD + MOD) % MOD) { } mint operator+(mint p) { return val + p.val; } mint operator-(mint p) { return val - p.val; } mint operator*(mint p) { return val * p.val; } mint operator/(mint p) { return val * modpow(p.val, MOD-2); } }; int N, K; const int N_ = 1005000; mint inv[N_]; mint fac[N_], invfac[N_]; int main() { scanf("%d%d", &N, &K); // precalc section { inv[1] = 1; for(int i = 2; i < N_; i++) { inv[i] = inv[MOD % i] * -(MOD / i); } invfac[0] = fac[0] = 1; for(int i = 1; i < N_; i++) { fac[i] = fac[i-1] * i; invfac[i] = invfac[i-1] * inv[i]; } } mint ans; for(int i = K+1; i <= N; i++) { ans = ans + fac[N+1] * inv[i+1] * (N+1-i); } printf("%lld\n", ans.val); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...