제출 #48717

#제출 시각아이디문제언어결과실행 시간메모리
48717faustaadpAliens (IOI16_aliens)C++17
25 / 100
184 ms7268 KiB
#include<bits/stdc++.h> #define ll long long #define pb push_back #define mp make_pair #define fi first #define se second using namespace std; #include "aliens.h" ll d[550][1010],i,j,b[1010],te,N,me[1010][1010]; pair<ll,ll> a[1010]; ll inter(ll aa,ll bb) { if(bb==N+1) return 0; if(a[aa].se<a[bb].fi||a[aa]==a[bb]) return 0; return (a[bb].fi-a[aa].se-1)*(a[bb].fi-a[aa].se-1); } ll depe(ll aa,ll bb) { if(aa==N+1) return 0; if(bb<=0) return 1e18; if(d[aa][bb]==-1) { d[aa][bb]=1e18; ll ii; for(ii=aa;ii<=N;ii++) d[aa][bb]=min(d[aa][bb],depe(ii+1,bb-1)+(a[ii].se-a[aa].fi+1)*(a[ii].se-a[aa].fi+1)-inter(ii,ii+1)); } return d[aa][bb]; } long long take_photos(int n, int m, int k, std::vector<int> r, std::vector<int> c) { for(i=0;i<n;i++) for(j=0;j<n;j++) { ll Ki=min(r[i],c[i]); ll Ka=max(r[i],c[i]); if(Ki==min(r[j],c[j])&&Ka==max(r[j],c[j])) continue; if(i==j) continue; if(Ki<r[j]&&r[j]<Ka&&Ki<c[j]&&c[j]<Ka) b[j]=1; } for(i=0;i<n;i++) if(!b[i]&&me[min(c[i],r[i])][max(r[i],c[i])]==0) { te++; a[te]=mp(min(r[i],c[i]),max(r[i],c[i])); me[min(c[i],r[i])][max(r[i],c[i])]=1; } memset(d,-1,sizeof(d)); N=te; sort(a+1,a+1+N); for(i=1;i<N;i++) if(a[i].se>a[i+1].se) while(1); // for(i=1;i<=N;i++) // cout<<a[i].fi<<" "<<a[i].se<<"\n"; // cout<<N<<"\n"; return depe(1,k); }
#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...