답안 #1118441

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1118441 2024-11-25T13:44:26 Z Tenis0206 Sprinklers (CEOI24_sprinklers) C++11
9 / 100
204 ms 5956 KB
#include <bits/stdc++.h>

using namespace std;

const int nmax = 1e5;

int n,m;
int s[nmax + 5], f[nmax + 5];

int dp[nmax + 5];

char dir[nmax + 5], dirm[nmax + 5];
int l[nmax + 5];

char r[nmax + 5];

int count_flowers(int l, int r)
{
    if(l > r)
    {
        return 0;
    }
    int st = 1;
    int dr = m;
    int poz_l = 0, poz_r = 0;
    while(st <= dr)
    {
        int mij = (st + dr) >> 1;
        if(f[mij] >= l)
        {
            poz_l = mij;
            dr = mij - 1;
        }
        else
        {
            st = mij + 1;
        }
    }
    st = 1;
    dr = m;
    while(st <= dr)
    {
        int mij = (st + dr) >> 1;
        if(f[mij] <= r)
        {
            poz_r = mij;
            st = mij + 1;
        }
        else
        {
            dr = mij - 1;
        }
    }
    if(poz_l == 0 || poz_r == 0)
    {
        return 0;
    }
    return (poz_r - poz_l + 1);
}

int search_last(int val)
{
    int st = 1;
    int dr = n;
    int poz = 0;
    while(st <= dr)
    {
        int mij = (st + dr) >> 1;
        if(s[mij] >= val)
        {
            poz = mij;
            dr = mij - 1;
        }
        else
        {
            st = mij + 1;
        }
    }
    return poz;
}

bool ok(int k)
{
    dp[0] = -1;
    for(int i=1;i<=n;i++)
    {
        if(count_flowers(dp[i - 1] + 1, s[i] - 1) == 0)
        {
            dp[i] = s[i] + k;
            dir[i] = 'R';
            l[i] = i;
            continue;
        }
        dir[i] = 'L';
        int poz = search_last(s[i] - k);
        l[i] = poz;
        if(poz == i)
        {
            if(count_flowers(dp[i - 1] + 1, s[i] - k - 1) == 0)
            {
                dp[i] = s[i];
            }
            else
            {
                dp[i] = -1;
            }
        }
        else if(poz == i - 1)
        {
            if(count_flowers(dp[i - 2] + 1, s[i] - k - 1) == 0)
            {
                dirm[i] = 'R';
                dp[i] = s[i - 1] + k;
            }
            else if(count_flowers(dp[i - 2] + 1, s[i - 1] - k - 1) == 0)
            {
                dirm[i] = 'L';
                dp[i] = s[i];
            }
            else
            {
                dp[i] = -1;
            }
        }
        else
        {
            if(count_flowers(dp[poz - 1] + 1, s[poz] - k - 1) == 0)
            {
                dp[i] = s[i - 1] + k;
            }
            else
            {
                dp[i] = -1;
            }
        }
    }
    return (dp[n] >= f[m]);
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    #ifdef home
    freopen("nr.in","r",stdin);
    freopen("nr.out","w",stdout);
    #endif // home
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>s[i];
    }
    for(int i=1;i<=m;i++)
    {
        cin>>f[i];
    }
    int st = 0;
    int dr = 1e9;
    int rez = -1;
    while(st<=dr)
    {
        int mij = (st + dr) >> 1;
        if(ok(mij))
        {
            rez = mij;
            dr = mij - 1;
        }
        else
        {
            st = mij + 1;
        }
    }
    cout<<rez<<'\n';
    if(rez == -1)
    {
        return 0;
    }
    ok(rez);
    int poz = n;
    while(poz >= 1)
    {
        r[poz] = dir[poz];
        if(l[poz] == poz - 1)
        {
            r[poz - 1] = dirm[poz];
        }
        else
        {
            for(int j=poz-1;j>=l[poz];j++)
            {
                r[j] = 'L';
            }
        }
        poz = l[poz] - 1;
    }
    for(int i=1;i<=n;i++)
    {
        cout<<r[i];
    }
    cout<<'\n';
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Correct
2 Correct 1 ms 336 KB Correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Correct
2 Correct 7 ms 1616 KB Correct
3 Correct 1 ms 508 KB Correct
4 Correct 8 ms 1788 KB Correct
5 Correct 14 ms 1616 KB Correct
6 Correct 1 ms 336 KB Correct
7 Correct 1 ms 336 KB Correct
8 Correct 4 ms 592 KB Correct
9 Correct 1 ms 336 KB Correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Correct
2 Correct 10 ms 1616 KB Correct
3 Correct 7 ms 592 KB Correct
4 Correct 90 ms 4060 KB Correct
5 Correct 63 ms 4064 KB Correct
6 Correct 1 ms 336 KB Correct
7 Correct 1 ms 336 KB Correct
8 Correct 96 ms 4080 KB Correct
9 Correct 183 ms 4180 KB Correct
10 Correct 27 ms 4176 KB Correct
11 Correct 38 ms 2712 KB Correct
12 Correct 42 ms 2396 KB Correct
13 Correct 53 ms 3084 KB Correct
14 Correct 93 ms 3352 KB Correct
15 Correct 70 ms 3420 KB Correct
16 Correct 53 ms 2988 KB Correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Correct
2 Correct 1 ms 336 KB Correct
3 Correct 1 ms 336 KB Correct
4 Correct 1 ms 472 KB Correct
5 Runtime error 6 ms 4176 KB Execution killed with signal 11
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Correct
2 Correct 46 ms 1924 KB Correct
3 Correct 176 ms 4168 KB Correct
4 Correct 203 ms 4168 KB Correct
5 Correct 202 ms 4148 KB Correct
6 Correct 187 ms 4148 KB Correct
7 Correct 204 ms 4156 KB Correct
8 Runtime error 192 ms 5956 KB Execution killed with signal 11
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Correct
2 Correct 1 ms 336 KB Correct
3 Correct 7 ms 1616 KB Correct
4 Correct 1 ms 508 KB Correct
5 Correct 8 ms 1788 KB Correct
6 Correct 14 ms 1616 KB Correct
7 Correct 1 ms 336 KB Correct
8 Correct 1 ms 336 KB Correct
9 Correct 4 ms 592 KB Correct
10 Correct 1 ms 336 KB Correct
11 Correct 10 ms 1616 KB Correct
12 Correct 7 ms 592 KB Correct
13 Correct 90 ms 4060 KB Correct
14 Correct 63 ms 4064 KB Correct
15 Correct 1 ms 336 KB Correct
16 Correct 1 ms 336 KB Correct
17 Correct 96 ms 4080 KB Correct
18 Correct 183 ms 4180 KB Correct
19 Correct 27 ms 4176 KB Correct
20 Correct 38 ms 2712 KB Correct
21 Correct 42 ms 2396 KB Correct
22 Correct 53 ms 3084 KB Correct
23 Correct 93 ms 3352 KB Correct
24 Correct 70 ms 3420 KB Correct
25 Correct 53 ms 2988 KB Correct
26 Correct 1 ms 336 KB Correct
27 Correct 1 ms 472 KB Correct
28 Runtime error 6 ms 4176 KB Execution killed with signal 11
29 Halted 0 ms 0 KB -