NC241412. 占星
描述
输入描述
两个数 ,含义见题面。
输出描述
一个数,其值为所求答案对 取模后的值。
示例1
输入:
6 3
输出:
15
C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 504K, 提交时间: 2022-09-10 01:04:53
#include <bits/stdc++.h> #define int long long #define mod 1000000007 using namespace std; int read() { int x; cin >> x; return x; } void print(__int128 x) { cout << (long long)(x%mod+mod)%mod << "\n"; } signed main() { ios::sync_with_stdio(false); cin.tie(0); __int128 n,k; n=read(),k=read(); __int128 X=0; if(k>=1) { X+=n-3; X+=(n%mod-4)*(k%mod-1); if(k==n) --X; } __int128 ans=n*(n-3)/2; ans%=mod,ans+=n*(n-1)%mod*(n-2)%mod*(n-3)%mod*41666667%mod; ++ans; // print(ans); print(ans-X-k); return 0; }
C++(clang++ 11.0.1) 解法, 执行用时: 2ms, 内存消耗: 480K, 提交时间: 2022-09-09 20:39:02
#include<cstdio> using namespace std; const int MOD=1e9+7; long long n,k,inv[30]; int main(){ scanf("%lld%lld",&n,&k);n%=MOD;k%=MOD;inv[1]=1; for(int i=2;i<=24;++i) inv[i]=MOD-MOD/i*1ll*inv[MOD%i]%MOD; printf("%lld",((1+n*(n-1)/2+n*(n-1)%MOD*(n-2)%MOD*(n-3)%MOD*inv[24]-n-(k?(n-2)+(k-1)*(n-3)-(k==n):0))%MOD+MOD)%MOD); return 0; }
Python3 解法, 执行用时: 43ms, 内存消耗: 4584K, 提交时间: 2022-09-13 20:58:36
n,k=map(int,input().split()) mod=1000000007 ans=((n-1)*(n-2)*(n*n-3*n+12)//24)%mod if k==1: ans=(ans-(n-2))%mod elif k==n: ans=(ans-(n-2)*(n-1)+2)%mod elif k!=0: ans=(ans-(n-2)-(n-3)*(k-1))%mod print(ans)