Submission #782947

#TimeUsernameProblemLanguageResultExecution timeMemory
782947kebineThe Xana coup (BOI21_xanadu)C++17
0 / 100
1 ms468 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll n,m; ll a[2005],b[2005]; ll pref[2005],suff[2005]; ll mod=1e9+7; ll jawab; vector <ll> ans; void solve (ll indeks, ll previous){ // cout<<indeks<<" "<<previous<<endl; if (indeks>=m){ ans.push_back(n); // for (auto z:ans) cout<<z<<" "; // cout<<endl; for (int i=1;i<ans.size();i++){ ll maks=0; for (int j=ans[i-1]+1;j<=ans[i];j++){ maks=max(maks,a[j]); // cout<<i<<" "<<maks<<"::"; } // cout<<endl<<endl; if (maks!=b[i]){ ans.pop_back(); return; } } // for (auto z:ans) cout<<z<<" "; // cout<<endl; jawab++; ans.pop_back(); return; } for (int i=previous+1;i<=n-(m-indeks);i++){ ans.push_back(i); solve(indeks+1,i); ans.pop_back(); } } ll fact (ll n){ if (n==0) return 1; return n%mod*fact(n-1)%mod; } ll kali (ll a, ll b){ return (a*b)%mod; } ll simpan=1; void fexpo(ll a, ll b){ // cout<<a<<" "<<b<<endl; if (b==1) { simpan=kali(simpan,a); return; } if (b%2==0){ fexpo(kali(a,a),b/2); } else{ simpan=kali(simpan,a); fexpo(kali(a,a),(b-1)/2); } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>m; for (int i=1;i<=n;i++){ cin>>a[i]; pref[i]=max(pref[i-1],a[i]); // cout<<pref[i]<<endl; } for (int i=1;i<=n;i++){ suff[i]=max(suff[i-1],a[n-i+1]); } // for (int i=1;i<=n;i++) cout<<pref[i]<<" "<<suff[i]<<":::"<<i<<endl; for (int i=1;i<=m;i++){ cin>>b[i]; } if (m==2){ ll ans=0; for(int i=1;i<n;i++){ // cout<<pref[i]<<" "<<b[1]<<suff[n-i+1]<<" "<<b[2]<<endl; if (pref[i]==b[1]&&suff[n-i]==b[2]) ans++; } cout<<ans%mod; } else if (n<=20&&m<=20){ // cout<<fact(n-1)<<" "<<fexpo(fact(m-1),2*fact(m)+1)<<" "<<fexpo(fact(n-m-2),2*fact(n-m-2)+1)<<endl; ans.push_back(0); solve(1,0); cout<<jawab; } else{ if (n<m) { cout<<0; return 0; } ll tes=1; ll u=m-1; // fexpo(fact(u)%mod,mod-2); // tes*=simpan%mod; // simpan=1; // fexpo(fact(n-m-2)%mod,mod-2); // tes*=simpan%mod*fact(n-1)%mod; // tes%=mod; // cout<<tes; } // else{ // if (m>n) cout<<0; // } }

Compilation message (stderr)

xanadu.cpp: In function 'void solve(ll, ll)':
xanadu.cpp:16:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   16 |         for (int i=1;i<ans.size();i++){
      |                      ~^~~~~~~~~~~
xanadu.cpp: In function 'int main()':
xanadu.cpp:96:12: warning: unused variable 'tes' [-Wunused-variable]
   96 |         ll tes=1;
      |            ^~~
xanadu.cpp:97:12: warning: unused variable 'u' [-Wunused-variable]
   97 |         ll u=m-1;
      |            ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...