제출 #328835

#제출 시각아이디문제언어결과실행 시간메모리
328835tnk2908Aliens (IOI16_aliens)C++14
컴파일 에러
0 ms0 KiB
// // main.cpp // aliens // // Created by Trần Nam Khánh on 11/18/20. // #include <iostream> #include <vector> #include <algorithm> using namespace std; struct ed { long long a,b,minsq; }; struct pt { long long r,c; }; vector<ed>ch; vector<pt>a,b; vector<pair<long long,long long> >g; long long n,m,k; long long check(ed a,ed b,ed c) { //(b.b-a.b)/(a.a-b.a) //(c.b-a.b)/(a.a-c.a) return (b.b-a.b)*(a.a-c.a)>=(c.b-a.b)*(a.a-b.a); } void add(long long x,long long y,long long mi) { ed a; a.a=x; a.b=y; a.minsq=mi; while(ch.size()>=2&&check(ch[ch.size()-2],ch[ch.size()-1],a)) { ch.pop_back(); } ch.push_back(a); } long long dis(long long x,ed a,ed b) { //(b.b-a.b)/(a.a-b.a) return (b.b-a.b)-x*(a.a-b.a); } pair<long long,long long> cal(long long c){ g.clear(); g.resize(n+1); ch.clear(); g[0]={0,0}; long long l=0; for(long long i=1;i<=n;i++) { long long X=a[i].c; while(l+1<ch.size()&&dis(X,ch[l],ch[l+1])<0) { l++; } long long tmp=(a[i].c-a[i].r+1)*(a[i].c-a[i].r+1)+g[i-1].first; if(a[i-1].c>=a[i].r) { tmp-=(a[i-1].c-a[i].r+1)*(a[i-1].c-a[i].r+1); } g[i].first=tmp+c; g[i].second=g[i-1].second+1; if(l<ch.size()&&g[i].first>ch[l].a*a[i].c+ch[l].b+a[i].c*a[i].c+c) { g[i].first=ch[l].a*a[i].c+ch[l].b+a[i].c*a[i].c+c; g[i].second=ch[l].minsq+1; if(l+1<ch.size()&&dis(X,ch[l],ch[l+1])==0) { g[i].second=min(g[i].second,ch[l+1].minsq+1); } }else if(l<ch.size()&&g[i].first==ch[l].a*a[i].c+ch[l].b+a[i].c*a[i].c+c) { g[i].second=min(g[i].second,ch[l].minsq+1); } add(-2*a[i].r+2,tmp+2*a[i].r*a[i].c-a[i].c*a[i].c-2*a[i].c,g[i-1].second); } return g[n]; } long long cmp(pt a,pt b) { return (a.c<b.c)||(a.c==b.c&&a.r<b.r); } long long cal2() { long long lo=0,hi=m*m,ans=0; while(lo<hi) { long long mid=(lo+hi+1)>>1; pair<long long,long long>tmp=cal(mid); if(tmp.second>=k) { lo=mid; }else hi=mid-1; } ans=cal(lo).first-k*lo; if(lo<m*m)ans=min(ans,cal(lo+1).first-k*(lo+1)) return ans; } int64_t take_photos(int N,int M,int K,vector<int> r,vector<int> c) { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); n=N;m=M;k=K; a.resize(n+1); for(long long i=1;i<=n;i++) { a[i].r=r[i-1]; a[i].c=c[i-1]; if(a[i].r>a[i].c) { swap(a[i].r,a[i].c); } } sort(a.begin()+1,a.end(),cmp); for(long long i=1;i<=n;i++) { while(b.size()!=0&&(a[i].r<=b.back().r)) { b.pop_back(); } b.push_back(a[i]); } a.resize(b.size()+1); for(long long i=0;i<b.size();i++) { a[i+1]=b[i]; } a[0].r=-1; a[0].c=-1; n=(long long)b.size(); k=min(k,n); return cal2(); } /* 3 7 2 0 3 4 6 3 4 */

컴파일 시 표준 에러 (stderr) 메시지

aliens.cpp: In function 'std::pair<long long int, long long int> cal(long long int)':
aliens.cpp:56:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<ed>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   56 |         while(l+1<ch.size()&&dis(X,ch[l],ch[l+1])<0)
      |               ~~~^~~~~~~~~~
aliens.cpp:67:13: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<ed>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   67 |         if(l<ch.size()&&g[i].first>ch[l].a*a[i].c+ch[l].b+a[i].c*a[i].c+c)
      |            ~^~~~~~~~~~
aliens.cpp:71:19: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<ed>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   71 |             if(l+1<ch.size()&&dis(X,ch[l],ch[l+1])==0)
      |                ~~~^~~~~~~~~~
aliens.cpp:75:19: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<ed>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   75 |         }else if(l<ch.size()&&g[i].first==ch[l].a*a[i].c+ch[l].b+a[i].c*a[i].c+c)
      |                  ~^~~~~~~~~~
aliens.cpp: In function 'long long int cal2()':
aliens.cpp:100:51: error: expected ';' before 'return'
  100 |    if(lo<m*m)ans=min(ans,cal(lo+1).first-k*(lo+1))
      |                                                   ^
      |                                                   ;
  101 |    return ans;
      |    ~~~~~~                                          
aliens.cpp:102:1: warning: no return statement in function returning non-void [-Wreturn-type]
  102 | }
      | ^
aliens.cpp: In function 'int64_t take_photos(int, int, int, std::vector<int>, std::vector<int>)':
aliens.cpp:126:24: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<pt>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  126 |     for(long long i=0;i<b.size();i++)
      |                       ~^~~~~~~~~