Submission #555333

#TimeUsernameProblemLanguageResultExecution timeMemory
555333600MihneaSightseeing in Kyoto (JOI22_kyoto)C++17
100 / 100
29 ms3152 KiB
#include <bits/stdc++.h> bool home = 1; using namespace std; typedef long long ll; const int N=(int)1e5+7; const ll INF=(ll)1e18+7; int n; int m; ll a[N]; ll b[N]; signed main() { #ifdef ONLINE_JUDGE home = 0; #endif home = 0; if (home) { freopen("I_am_iron_man", "r", stdin); } else { ios::sync_with_stdio(0); cin.tie(0); } vector<int> shib_a, shib_b; cin>>n>>m; for (int i=1;i<=n;i++) { cin>>a[i]; while (1) { if((int)shib_a.size()<2) break; int p1=shib_a[(int)shib_a.size()-2]; int p2=shib_a[(int)shib_a.size()-1]; if((a[i]-a[p2])*(p2-p1)<(a[p2]-a[p1])*(i-p2)) { shib_a.pop_back(); }else{ break; } } shib_a.push_back(i); } for (int i=1;i<=m;i++) { cin>>b[i]; while (1) { if((int)shib_b.size()<2) break; int p1=shib_b[(int)shib_b.size()-2]; int p2=shib_b[(int)shib_b.size()-1]; if((b[i]-b[p2])*(p2-p1)<(b[p2]-b[p1])*(i-p2)) { shib_b.pop_back(); }else{ break; } } shib_b.push_back(i); } n=(int)shib_a.size()-1; m=(int)shib_b.size()-1; ll sol=0; int i=0,j=0; while(i<n||j<m){ bool dojo=0; if(i==n){ dojo=1; }else{ if(j==m){ dojo=0; }else{ assert(i<n&&j<m); ll a1=shib_a[i]; ll a2=shib_a[i+1]; ll b1=shib_b[j]; ll b2=shib_b[j+1]; if((a[a2]-a[a1])*(b2-b1)>(b[b2]-b[b1])*(a2-a1)){ dojo=1; }else{ dojo=0; } } } if(dojo==0){ assert(i<n); sol+=(shib_a[i+1]-shib_a[i])*b[shib_b[j]]; i++; }else{ assert(j<m); sol+=(shib_b[j+1]-shib_b[j])*a[shib_a[i]]; j++; } } cout<<sol<<"\n"; }

Compilation message (stderr)

kyoto.cpp: In function 'int main()':
kyoto.cpp:23:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   23 |     freopen("I_am_iron_man", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...