답안 #16730

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
16730 2015-09-12T05:23:04 Z suhgyuho_william 수족관 2 (KOI13_aqua2) C++
0 / 100
60 ms 3720 KB
#include <stdio.h>
#include <algorithm>
using namespace std;

int n;
int x[300002],y[300002];
bool check[300002];
long long leftwater;
double wtime;

int find_edge(int sx,int sy){
    int left,mid,right;

    left = 1;
    right = n;
    while(true){
        mid = (left+right)/2;
        if(sx == x[mid] && sy == y[mid]) break;
        if(sx < x[mid]) right = mid-1;
        else if(x[mid] < sx) left = mid+1;
        else{
            if(x[mid-1] == sx) return mid-1;
            else return mid+1;
        }
    }
    return mid;
}

double dfs(int s,int e,int hole){
    int i;
    int v,small;
    int shole,ehole;
    long long twater;
    double water;

    if(s+1 == e) return 0;
    if(hole == 0){
        twater = 0;
        for(i=s; i<=e; i++){
            if(y[i] == y[i+1]) twater += ((x[i+1]-x[i])*(y[i]-y[s]));
        }
        leftwater += twater;

        return 0;
    }

    small = 999999999;
    for(i=s+1; i<e; i+=2){
        if(check[i] && small > y[i]){
            small = y[i];
            v = i;
        }
    }
    shole = ehole = 0;
    for(i=s+1; i<v; i+=2){
        if(check[i]) shole++;
    }
    for(i=v+2; i<e; i+=2){
        if(check[i]) ehole++;
    }
    water = ((small-y[s])*(x[e]-x[s]))/hole;
    y[s] = y[e] = small;
    return water+max(dfs(s,v,shole),dfs(v+1,e,ehole));
}

int main(void){
    int i,k;
    //freopen("input.txt","r",stdin);

    scanf("%d",&n);
    for(i=1; i<=n; i++){
        scanf("%d %d",&x[i],&y[i]);
    }
    scanf("%d",&k);
    for(i=1; i<=k; i++){
        scanf("%d %d %d %d",&x[0],&y[0],&x[n+1],&y[n+1]);
        check[find_edge(x[0],y[0])] = true;
    }
    wtime = leftwater = 0;

    wtime = dfs(1,n,k);

    printf("%.2f\n%lld",wtime,leftwater);

    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 3720 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 3720 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 3720 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 60 ms 3720 KB Output isn't correct
2 Halted 0 ms 0 KB -