結果
問題 | No.2008 Super Worker |
ユーザー | t9unkubj |
提出日時 | 2024-12-31 02:59:50 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 86 ms / 2,000 ms |
コード長 | 5,300 bytes |
コンパイル時間 | 4,162 ms |
コンパイル使用メモリ | 271,408 KB |
実行使用メモリ | 6,824 KB |
最終ジャッジ日時 | 2024-12-31 02:59:59 |
合計ジャッジ時間 | 7,393 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
6,816 KB |
testcase_01 | AC | 2 ms
6,816 KB |
testcase_02 | AC | 2 ms
6,820 KB |
testcase_03 | AC | 2 ms
6,816 KB |
testcase_04 | AC | 2 ms
6,816 KB |
testcase_05 | AC | 3 ms
6,820 KB |
testcase_06 | AC | 2 ms
6,816 KB |
testcase_07 | AC | 2 ms
6,816 KB |
testcase_08 | AC | 2 ms
6,820 KB |
testcase_09 | AC | 2 ms
6,820 KB |
testcase_10 | AC | 2 ms
6,820 KB |
testcase_11 | AC | 2 ms
6,816 KB |
testcase_12 | AC | 2 ms
6,816 KB |
testcase_13 | AC | 3 ms
6,820 KB |
testcase_14 | AC | 2 ms
6,816 KB |
testcase_15 | AC | 2 ms
6,816 KB |
testcase_16 | AC | 3 ms
6,816 KB |
testcase_17 | AC | 2 ms
6,816 KB |
testcase_18 | AC | 2 ms
6,824 KB |
testcase_19 | AC | 2 ms
6,820 KB |
testcase_20 | AC | 2 ms
6,816 KB |
testcase_21 | AC | 3 ms
6,816 KB |
testcase_22 | AC | 2 ms
6,820 KB |
testcase_23 | AC | 54 ms
6,820 KB |
testcase_24 | AC | 54 ms
6,824 KB |
testcase_25 | AC | 55 ms
6,820 KB |
testcase_26 | AC | 56 ms
6,820 KB |
testcase_27 | AC | 55 ms
6,816 KB |
testcase_28 | AC | 65 ms
6,816 KB |
testcase_29 | AC | 86 ms
6,816 KB |
testcase_30 | AC | 64 ms
6,820 KB |
testcase_31 | AC | 63 ms
6,816 KB |
testcase_32 | AC | 64 ms
6,820 KB |
testcase_33 | AC | 52 ms
6,816 KB |
testcase_34 | AC | 63 ms
6,816 KB |
testcase_35 | AC | 38 ms
6,816 KB |
ソースコード
#ifdef t9unkubj #include"debug.cpp" //#include"template_no_debug.h" #else #define dbg(...) 199958 #endif #undef _GLIBCXX_DEBUG #pragma GCC optimize("O3") using namespace std; #include<bits/stdc++.h> using ll=long long; using ull=unsigned long long; template<class T>using vc=vector<T>; template<class T>using vvc=vc<vc<T>>; #define rep(i,n) for(ll i=0;i<(ll)(n);i++) #define REP(i,j,n) for(ll i=(j);i<(ll)(n);i++) #define DREP(i,n,m) for(ll i=(n);i>=(m);i--) #define drep(i,n) for(ll i=((n)-1);i>=0;i--) #define all(x) x.begin(),x.end() #define rall(x) x.rbegin(),x.rend() template<class T,class F> bool chmin(T &x, F y){ if(x>y){ x=y; return true; } return false; } template<class T, class F> bool chmax(T &x, F y){ if(x<y){ x=y; return true; } return false; } double pass_time=0; template<class T,class G,class F> F modpow(T x,G p,F m){ T ret=1%m; x%=m; while(p){ if(p&1)ret=(1ll*ret*x)%m; x=(1ll*x*x)%m; p>>=1; } return ret; } template<class T> T extgcd(T a,T b,T&x,T&y){//ax+by=gcd(a,b)となるようなもの if(b==0){ x=1; y=0; return a; }else{ T res=extgcd(b,a%b,y,x); y-=(a/b)*x; return res; } } template<class T> pair<T,T> inv(T x,T m){ T a1,a2; T res=extgcd(x,m,a1,a2); return {a1,m/res}; } constexpr int mod=1e9+7; struct mint{ long long val; inline long long fast(long long x){ if(x<mod&&x>=0)return x; x%=mod; if(x<0)x+=mod; return x; } mint():val(0){} mint(long long val):val(fast(val)){} mint power(long long m)const { mint res(1); mint ret(*this); while(m){ if(m&1)res*=ret; ret*=ret; m>>=1; } return res; } mint& operator++() { val++; if (val == mod) val = 0; return *this; } mint& operator--() { if (val == 0)val=mod; val--; return *this; } mint operator++(int) { mint result = *this; ++*this; return result; } mint operator--(int) { mint result = *this; --*this; return result; } mint operator-() const { return mint(-val); } friend mint operator +(const mint&a,const mint&b) noexcept{ return mint(a)+=b; } friend mint operator -(const mint&a,const mint&b) noexcept{ return mint(a)-=b; } friend mint operator *(const mint&a,const mint&b) noexcept{ return mint(a)*=b; } friend mint operator /(const mint&a,const mint&b) noexcept{ return mint(a)/=b; } mint& operator+=(const mint&a)noexcept{ val+=a.val; if(val>=mod)val-=mod; return *this; } mint& operator-=(const mint&a)noexcept{ val-=a.val; if(val<0)val+=mod; return *this; } mint& operator*=(const mint&a){ val*=a.val; val=fast(val); return *this; } mint& operator/=(const mint&a){ val*=inv<long long>(a.val,mod).first; val=fast(val); return *this; } bool operator == (const mint&x)const noexcept{ return this->val==x.val; } bool operator != (const mint&x)const noexcept{ return this->val!=x.val; } friend ostream& operator << (ostream &os, const mint &x) noexcept { return os << x.val; } friend istream& operator >> (istream &is, mint &x) noexcept { long long v; is >> v; x=mint(v); return is; } }; vector<mint>fact(1,1),invfact(1,1); void build(int n){ if(n<(int)fact.size())return; fact=invfact=vector<mint>(n+1); fact[0]=1; for(int i=1;i<=n;i++)fact[i]=fact[i-1]*i; invfact[n]=(1/fact[n]); for(int i=n-1;i>=0;i--)invfact[i]=invfact[i+1]*(i+1); } mint C(int a,int b){//aCb if(a<0||b<0||a-b<0)return mint(0); while((int)fact.size()<=a){ fact.push_back(fact.back()*(fact.size())); } while((int)invfact.size()<=a){ invfact.push_back(invfact.back()/invfact.size()); } return fact[a]*invfact[b]*invfact[a-b]; } mint P(int a,int b){ if(a<b||b<0)return 0; return fact[a]*invfact[a-b]; } //a個のものからb個を重複を許して選ぶ mint H(int a,int b){ return C(a+b-1,b); } void print(mint a) { cout << a; } template<class T> pair<T,T> mod_solve(T a,T b,T m){//ax=b mod mとなるxを返す a%=m,b%=m;if(a<0)a+=m;if(b<0)b+=m; T g=gcd(gcd(a,b),m); a/=g,b/=g,m/=g; if(gcd(a,m)>1)return {-1,-1}; return {(inv(a,m).first*b)%m,inv(a,m).second}; } void solve(){ int n; cin>>n; vc<pair<ll,ll>>data(n); rep(i,n)cin>>data[i].first; rep(i,n)cin>>data[i].second; sort(all(data),[](auto a,auto b)->int{ if(a.second==1)return 0; if(b.second==1)return 1; return a.first*(1-b.second)>b.first*(1-a.second); }); dbg(data); mint level=1; mint ans=0; rep(i,n){ ans+=level*data[i].first; level*=data[i].second; } cout<<ans<<"\n"; } signed main(){ cin.tie(0)->sync_with_stdio(0); pass_time=clock(); int t=1; //cin>>t; while(t--)solve(); pass_time=clock()-pass_time; dbg(pass_time/CLOCKS_PER_SEC); }