結果
問題 | No.1904 Never giving up! |
ユーザー | moonrabbit2 |
提出日時 | 2022-04-15 21:28:50 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 3,706 bytes |
コンパイル時間 | 3,727 ms |
コンパイル使用メモリ | 224,168 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-06-07 02:40:38 |
合計ジャッジ時間 | 3,453 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,248 KB |
testcase_02 | AC | 2 ms
5,376 KB |
testcase_03 | AC | 2 ms
5,376 KB |
testcase_04 | AC | 2 ms
5,376 KB |
testcase_05 | AC | 2 ms
5,376 KB |
testcase_06 | AC | 1 ms
5,376 KB |
testcase_07 | AC | 2 ms
5,376 KB |
testcase_08 | AC | 2 ms
5,376 KB |
testcase_09 | AC | 2 ms
5,376 KB |
testcase_10 | AC | 2 ms
5,376 KB |
testcase_11 | AC | 2 ms
5,376 KB |
ソースコード
#pragma GCC optimize("O3") #pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") #pragma GCC target("sse,sse2,sse3,ssse3,sse4,sse4.1,sse4.2,popcnt,abm,mmx,avx,avx2,fma") #include <bits/stdc++.h> //#include <atcoder/all> //using namespace atcoder; //#include <bits/extc++.h> //#include <ext/pb_ds/assoc_container.hpp> //#include <ext/pb_ds/tree_policy.hpp> //#include <ext/pb_ds/priority_queue.hpp> #define fi first #define se second using namespace std; //using namespace __gnu_pbds; typedef long long ll; typedef unsigned long long ull; typedef double db; typedef pair<int,int> pii; typedef pair<ll,ll> pll; typedef pair<db,db> pdb; typedef tuple<int,int,int> tii; typedef tuple<db,db,db> tdb; typedef tuple<ll,ll,ll> tll; typedef tuple<int,int,int,int> ti4; typedef tuple<ll,ll,ll,ll> tl4; typedef tuple<db,db,db,db> td4; //typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> oset; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); //shuffle(a+1,a+1+n,rng) uniform_int_distribution<> gen(1,100); //gen(rng) ll modinv(ll a,ll m){ if(m==1) return 0; a%=m; if(a<0) a+=m; if(a==1) return 1; return m-modinv(m,a)*m/a; } template <int MOD_> struct modnum{ private: int v; public: static const int MOD = MOD_; modnum() : v(0) {} modnum(ll v_) : v(int(v_ % MOD)) { if (v < 0) v += MOD; } explicit operator int () const { return v; } friend bool operator == (const modnum& a, const modnum& b) { return a.v == b.v; } friend bool operator != (const modnum& a, const modnum& b) { return a.v != b.v; } friend bool operator < (const modnum& a, const modnum& b) { return a.v < b.v; } friend bool operator <= (const modnum& a, const modnum& b) { return a.v <= b.v; } friend bool operator > (const modnum& a, const modnum& b) { return a.v > b.v; } friend bool operator >= (const modnum& a, const modnum& b) { return a.v >= b.v; } modnum operator ~ () const { modnum res; res.v = modinv(v, MOD); return res; } modnum& operator += (const modnum& o) { v += o.v; if (v >= MOD) v -= MOD; return *this; } modnum& operator -= (const modnum& o) { v -= o.v; if (v < 0) v += MOD; return *this; } modnum& operator *= (const modnum& o) { v = int(ll(v) * ll(o.v) % MOD); return *this; } modnum& operator /= (const modnum& o) { return *this *= (~o); } modnum operator-() const { return modnum(-v); } modnum& operator++() { return *this += 1; } modnum operator++(int){ modnum tmp=*this; ++*this; return tmp; } modnum& operator--() { return *this -= 1; } modnum operator--(int){ modnum tmp=*this; --*this; return tmp; } friend modnum operator + (const modnum& a, const modnum& b) { return modnum(a) += b; } friend modnum operator - (const modnum& a, const modnum& b) { return modnum(a) -= b; } friend modnum operator * (const modnum& a, const modnum& b) { return modnum(a) *= b; } friend modnum operator / (const modnum& a, const modnum& b) { return modnum(a) /= b; } friend modnum pow(modnum a, ll p) { modnum ans = 1; for (; p; p /= 2, a *= a) if (p&1) ans *= a; return ans; } friend ostream& operator<<(std::ostream& os, const modnum& o) { os << o.v; return os; } friend istream& operator>>(std::istream& is, modnum& o) { is >> o.v; return is; } }; using mi=modnum<1000000007>; const int N=25,M=(1<<21),Q=1e6+5; const ll mod=1000000007,inf=1e18; int n,a[N]; ll fact[N],res=1; int main(){ ios::sync_with_stdio(false); cin.tie(0); cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+1+n); fact[1]=1; for(int i=2;i<=n;i++) fact[i]=fact[i-1]*i; for(int i=1;i<=n;i++){ int j=i; while(j+1<=n&&a[i]==a[j+1]) j++; res*=fact[j-i+1]; i=j; } cout<<fact[n]/res; return 0; }