답안 #32181

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
32181 2017-10-03T10:31:44 Z dongwon0427 Aliens (IOI16_aliens) C++
컴파일 오류
0 ms 0 KB
#include "aliens.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int,ld> pil;
struct _tuple {
    int x,y;
};
_tuple A[100005],B[100005];
int n;
ld dp[100005];
int gaesu[100005];
pil CHT(ld c) {
    gaesu[0]=0;
    for(int i=1;i<=n;i++) {
        dp[i] = (ld)(A[i].y-A[1].x+1)*(ld)(A[i].y-A[1].x+1)-c;
        int minidx = 0;
        for(int j=1;j<i;j++) {
            if( dp[i] > dp[j] + (ld)(A[i].y-A[j+1].x+1)*(ld)(A[i].y-A[j+1].x+1) - (ld)max(0,-A[j+1].x+A[j].y+1)*(ld)max(0,-A[j+1].x+A[j].y+1) - c ) {
                minidx = j;
                dp[i] = dp[j] + (ld)(A[i].y-A[j+1].x+1)*(ld)(A[i].y-A[j+1].x+1) - (ld)max(0,-A[j+1].x+A[j].y+1)*(ld)max(0,-A[j+1].x+A[j].y+1) - c;
            }
        }
        gaesu[i] = gaesu[minidx]+1;
    }
    //cout<<c<<" : "<<dp[n]<<' '<<gaesu[n]<<endl;
    return pil(gaesu[n],dp[n]);
}
ll take_photos(int N, int m, int k, std::vector<int> r, std::vector<int> c) {
    for(int i=0;i<N;i++) {
        B[i].x=r[i];
        B[i].y=c[i];
        if(B[i].x > B[i].y) swap(B[i].x,B[i].y);
    }
    sort(B,B+N,[](_tuple a,_tuple b){return a.x>b.x;});
    for(int i=0;i<N;i++) {
        while(n!=0 && A[n].y <= B[i].y) {
            n--;
        }
        A[++n] = B[i];
    }
    reverse(A+1,A+1+n);
    if(k>n) k = n;
    ll bs = -(ll)m*(ll)m-1ll, be = 0;
    int lft=1,rht=n;
    ll L=(ll)m*(ll)m,R=(ll)m*(ll)m;
    while(bs<=be) {
        ll bm = (bs+be)/2;
        //printf("%d\n",bm);
        ld gi = (ld)bm + (ld)0.5;
        pil tmp = CHT(gi);
        if(tmp.first==k) {
            return (long long)(tmp.second + gi*(ld)(k));
        }
        if(tmp.first > k) {
            be=bm-1;
            if(rht >= tmp.first) {
                rht = tmp.first;
                R = (ll)(tmp.second + gi*(ld)(k));
            }
        } else {
            bs=bm+1;
            if(lft <= tmp.first) {
                lft = tmp.first;
                R = (ll)(tmp.second + gi*(ld)(k));
            }
        }
    }
    /*for(ll i=bs;i<=be;i++) {
        CHT((ld)i+(ld)0.5);
    }*/
    return (L*(ll)(rht-k) + R*(ll)(k-lft)) / (ll)(-lft+rht);
}

Compilation message

aliens.cpp: In function 'll take_photos(int, int, int, std::vector<int>, std::vector<int>)':
aliens.cpp:36:53: warning: lambda expressions only available with -std=c++11 or -std=gnu++11
     sort(B,B+N,[](_tuple a,_tuple b){return a.x>b.x;});
                                                     ^
aliens.cpp:36:54: error: no matching function for call to 'sort(_tuple [100005], _tuple*, take_photos(int, int, int, std::vector<int>, std::vector<int>)::<lambda(_tuple, _tuple)>)'
     sort(B,B+N,[](_tuple a,_tuple b){return a.x>b.x;});
                                                      ^
In file included from /usr/include/c++/5/algorithm:62:0,
                 from /usr/include/x86_64-linux-gnu/c++/5/bits/stdc++.h:64,
                 from aliens.cpp:2:
/usr/include/c++/5/bits/stl_algo.h:4689:5: note: candidate: template<class _RAIter> void std::sort(_RAIter, _RAIter)
     sort(_RandomAccessIterator __first, _RandomAccessIterator __last)
     ^
/usr/include/c++/5/bits/stl_algo.h:4689:5: note:   template argument deduction/substitution failed:
aliens.cpp:36:54: note:   candidate expects 2 arguments, 3 provided
     sort(B,B+N,[](_tuple a,_tuple b){return a.x>b.x;});
                                                      ^
In file included from /usr/include/c++/5/algorithm:62:0,
                 from /usr/include/x86_64-linux-gnu/c++/5/bits/stdc++.h:64,
                 from aliens.cpp:2:
/usr/include/c++/5/bits/stl_algo.h:4718:5: note: candidate: template<class _RAIter, class _Compare> void std::sort(_RAIter, _RAIter, _Compare)
     sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
     ^
/usr/include/c++/5/bits/stl_algo.h:4718:5: note:   template argument deduction/substitution failed:
aliens.cpp: In substitution of 'template<class _RAIter, class _Compare> void std::sort(_RAIter, _RAIter, _Compare) [with _RAIter = _tuple*; _Compare = take_photos(int, int, int, std::vector<int>, std::vector<int>)::<lambda(_tuple, _tuple)>]':
aliens.cpp:36:54:   required from here
aliens.cpp:36:54: error: template argument for 'template<class _RAIter, class _Compare> void std::sort(_RAIter, _RAIter, _Compare)' uses local type 'take_photos(int, int, int, std::vector<int>, std::vector<int>)::<lambda(_tuple, _tuple)>'
     sort(B,B+N,[](_tuple a,_tuple b){return a.x>b.x;});
                                                      ^
aliens.cpp:36:54: error:   trying to instantiate 'template<class _RAIter, class _Compare> void std::sort(_RAIter, _RAIter, _Compare)'