Submission #833593

#TimeUsernameProblemLanguageResultExecution timeMemory
833593vjudge1Exam (eJOI20_exam)C++17
12 / 100
1073 ms4812 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define pll pair<long long, long long> #define pii pair<int,int> #define fi first #define se second const ll MOD=1e9+7; void solve(){ int n; cin >> n; int ans=0; ll robot[n]; ll building[n]; bool subtask2=true; priority_queue<pii, vector<pii>, greater<pii> > order; for(int i=0; i<n; i++){ cin >> robot[i]; } for(int i=0; i<n; i++){ cin >> building[i]; order.push(make_pair(building[i],i)); if(subtask2 && i>0){ if(building[i]!=building[i-1]){ subtask2=false; } } } if(subtask2){ bool visited[n]; memset(visited,0,sizeof(visited)); for(int i=0; i<n; i++){ if(robot[i]==building[i] && !visited[i]){ visited[i]=true; ans++; ll idx=i+1; while(robot[idx]<=robot[i] && idx<n){ visited[idx]=true; ans++; idx++; } idx=i-1; while(robot[idx]<=robot[i] && idx>=0){ visited[idx]=true; ans++; idx--; } } } }else{ bool bisa[n]; memset(bisa,0,sizeof(bisa)); for(int i=0; i<n; i++){ int cur=order.top().se; order.pop(); ll idx=cur; ll debt=0; ll nambah=0; bool ada=false; while(robot[idx]<=building[cur] && idx<n){ if(building[idx]==building[cur]){ nambah++; } if(robot[idx]==building[cur]){ ada=true; break; } if(bisa[idx]){ debt++; } idx++; } if(ada){ if(nambah>debt){ for(int j=cur; j<=idx; j++){ robot[j]=building[cur]; if(robot[j]==building[j]){ bisa[j]=true; }else{ bisa[j]=false; } } } } debt=0; nambah=0; if(ada){ idx=cur-1; }else{ idx=cur; } ada=false; while(robot[idx]<=building[cur] && idx>=0){ if(building[idx]==building[cur]){ nambah++; } if(robot[idx]==building[cur]){ ada=true; break; } if(bisa[idx]){ debt++; } idx--; } if(ada){ if(nambah>debt){ for(int j=cur; j>=idx; j--){ robot[j]=building[cur]; if(robot[j]==building[j]){ bisa[j]=true; }else{ bisa[j]=false; } } } } } for(int j=0; j<n; j++){ if(robot[j]==building[j]){ ans++; } } } cout << ans << endl; return; } int main(){ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); int q=1; for(int i=0; i<q; i++){ solve(); } return 0; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...