hkshakib

Untitled

Apr 30th, 2020
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.25 KB | None | 0 0
  1. #pragma GCC optimize("O3")
  2. #pragma GCC optimize("unroll-loops")
  3. #pragma GCC optimize("no-stack-protector")
  4. #pragma GCC target("sse,sse2,ssse3,sse3,sse4,popcnt,avx,mmx,abm,tune=native")
  5. #include <bits/stdc++.h>
  6. using namespace std;
  7.  
  8. // MODULAR TYPE *************************************************************************
  9. // -Source: https://codeforces.com/blog/entry/63903
  10.  
  11. const int M=998244353;
  12.  
  13. template<class T,T MOD=M>
  14. struct modular {
  15. T val;
  16.  
  17. modular(T x=0){val=x%MOD;if(val<0)val+=MOD;}
  18. modular(T a,T b):val(0){*this+=a;*this/=b;}
  19.  
  20. modular& operator+=(modular const& b){val+=b.val;if(val>=MOD)val-=MOD;return *this;}
  21. modular& operator-=(modular const& b){val-=b.val;if(val<0)val+=MOD;return *this;}
  22. modular& operator*=(modular const& b){val=(long long)val*b.val%MOD;return *this;}
  23.  
  24. friend modular mpow(modular a,long long x) {
  25. modular ret=1;while(x){if(x&1)ret*=a;a*=a;x>>=1;}
  26. return ret;
  27. }
  28. friend modular inv(modular a){return mpow(a,MOD-2);}
  29. modular& operator/=(modular const& b){return *this*=inv(b);}
  30.  
  31. friend modular operator+(modular a,modular const b){return a+=b;}
  32. friend modular operator-(modular a,modular const b){return a-=b;}
  33. friend modular operator-(modular const a){return 0-a;}
  34. friend modular operator*(modular a,modular const b){return a*=b;}
  35. friend modular operator/(modular a,modular const b){return a/=b;}
  36. friend std::ostream& operator<<(std::ostream& o,modular const& a){return o<<a.val;}
  37. friend bool operator==(modular const& a,modular const& b){return a.val==b.val;}
  38. friend bool operator!=(modular const& a,modular const& b){return a.val!=b.val;}
  39. };
  40.  
  41. // **************************************************************************************
  42.  
  43. //#define int long long
  44.  
  45. const int N=200005;
  46. vector<modular<int>> f(N);
  47.  
  48. modular<int> choose(int n,int k){
  49. return f[n]/(f[k]*f[n-k]);
  50. }
  51.  
  52. signed main(){
  53. cin.tie(nullptr)->sync_with_stdio(false);
  54. int n,k;cin>>n>>k;
  55. int g=n-k; //number of files to be used
  56. if(g<1){cout<<"0\n";return 0;}
  57. f[0]=1;
  58. for(int i=1;i<=n;i++)f[i]=f[i-1]*i;
  59. modular<int> ans=choose(n,g);
  60. modular<int> tmp;
  61. for(int i=0;i<=g;i++){
  62. tmp+=((i&1)?-1:1)*choose(g,i)*mpow(modular<int>(g-i),n);
  63. }
  64. ans*=tmp;
  65. if(g!=n)ans*=2;
  66. cout<<ans<<"\n";
  67. }
Add Comment
Please, Sign In to add comment