답안 #792628

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
792628 2023-07-25T07:35:49 Z 반딧불(#10051) Line Town (CCO23_day1problem3) C++17
3 / 25
2000 ms 12320 KB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
const ll INF = 1e18;

void imp(){
    puts("-1");
    exit(0);
}

int n;
int arr[500002];

void input();
void solve();

int main(){
    input();
    solve();
}

void input(){
    scanf("%d", &n);
    for(int i=1; i<=n; i++) scanf("%d", &arr[i]);

    vector<int> vec;
    for(int i=1; i<=n; i++) if(arr[i]) vec.push_back(abs(arr[i]));
    sort(vec.begin(), vec.end());
    vec.erase(unique(vec.begin(), vec.end()), vec.end());
    for(int i=1; i<=n; i++){
        if(!arr[i]) continue;
        arr[i] = (lower_bound(vec.begin(), vec.end(), abs(arr[i])) - vec.begin() + 1) * (arr[i]<0 ? -1 : 1);
    }

    int odd1 = 0, even1 = 0;
    for(int i=1; i<=n; i++) if(arr[i] == 1){
        if(i%2) odd1++;
        else even1++;
    }
//    if(abs(odd1 - even1) > 1) imp();
}

ll ans;
ll prf[500002], suf[500002];

int c[500002];

void solve(){
    for(int i=0; i<=n+1; i++) prf[i] = suf[i] = INF;
    prf[0] = 0;
    suf[n+1] = 0;
    ll cnt = 0;
    int MX = 0;

    /// prf�� ���Ѵ�
    for(int i=1; i<=n; i++) c[i] = arr[i];
    cnt = 0, MX = 0;
    for(int i=1; i<=n; i++){
        if(c[i] == -1){
            if(i >= MX) prf[i] = cnt;
            continue;
        }
        int j = i+1;
        while(j<=n && c[j] != c[j-1]) j++;
        if(j>n) break;
        MX = max(MX, j);

        for(int t=j; t>=i+1; t--){
            cnt++;
            c[t] = c[t-1] = -c[t];
        }
        if(MX<=i+1) prf[++i] = cnt;
    }

    /// suf�� ���Ѵ�
    for(int i=1; i<=n; i++) c[i] = arr[i];
    cnt = 0, MX = n+1;
    for(int i=n; i>=1; i--){
        if(c[i] == 1){
            if(i <= MX) suf[i] = cnt;
            continue;
        }
        int j = i-1;
        while(j>=1 && c[j] != c[j+1]) j--;
        if(j<1) break;
        MX = min(MX, j);

        for(int t=j; t<=i-1; t++){
            cnt++;
            c[t] = c[t+1] = -c[t];
        }
        if(MX>=i-1) suf[--i] = cnt;
    }

    ans = INF;
    for(int i=0; i<=n; i++) ans = min(ans, prf[i] + suf[i+1]);

    printf("%lld", ans == INF ? -1 : ans);
}

Compilation message

Main.cpp: In function 'void input()':
Main.cpp:25:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   25 |     scanf("%d", &n);
      |     ~~~~~^~~~~~~~~~
Main.cpp:26:34: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   26 |     for(int i=1; i<=n; i++) scanf("%d", &arr[i]);
      |                             ~~~~~^~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 232 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 268 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 2 ms 340 KB Output is correct
10 Correct 2 ms 340 KB Output is correct
11 Correct 2 ms 340 KB Output is correct
12 Correct 3 ms 340 KB Output is correct
13 Correct 2 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 232 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 268 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 2 ms 340 KB Output is correct
10 Correct 2 ms 340 KB Output is correct
11 Correct 2 ms 340 KB Output is correct
12 Correct 3 ms 340 KB Output is correct
13 Correct 2 ms 340 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 152 ms 12164 KB Output is correct
16 Correct 286 ms 12320 KB Output is correct
17 Correct 226 ms 12180 KB Output is correct
18 Correct 214 ms 12212 KB Output is correct
19 Correct 379 ms 12276 KB Output is correct
20 Execution timed out 2060 ms 12136 KB Time limit exceeded
21 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 232 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 268 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 2 ms 340 KB Output is correct
10 Correct 2 ms 340 KB Output is correct
11 Correct 2 ms 340 KB Output is correct
12 Correct 3 ms 340 KB Output is correct
13 Correct 2 ms 340 KB Output is correct
14 Incorrect 0 ms 212 KB Output isn't correct
15 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 232 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 268 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 2 ms 340 KB Output is correct
10 Correct 2 ms 340 KB Output is correct
11 Correct 2 ms 340 KB Output is correct
12 Correct 3 ms 340 KB Output is correct
13 Correct 2 ms 340 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 152 ms 12164 KB Output is correct
16 Correct 286 ms 12320 KB Output is correct
17 Correct 226 ms 12180 KB Output is correct
18 Correct 214 ms 12212 KB Output is correct
19 Correct 379 ms 12276 KB Output is correct
20 Execution timed out 2060 ms 12136 KB Time limit exceeded
21 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 0 ms 212 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 0 ms 212 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 232 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 268 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 2 ms 340 KB Output is correct
10 Correct 2 ms 340 KB Output is correct
11 Correct 2 ms 340 KB Output is correct
12 Correct 3 ms 340 KB Output is correct
13 Correct 2 ms 340 KB Output is correct
14 Incorrect 0 ms 212 KB Output isn't correct
15 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 232 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 268 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 2 ms 340 KB Output is correct
10 Correct 2 ms 340 KB Output is correct
11 Correct 2 ms 340 KB Output is correct
12 Correct 3 ms 340 KB Output is correct
13 Correct 2 ms 340 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 152 ms 12164 KB Output is correct
16 Correct 286 ms 12320 KB Output is correct
17 Correct 226 ms 12180 KB Output is correct
18 Correct 214 ms 12212 KB Output is correct
19 Correct 379 ms 12276 KB Output is correct
20 Execution timed out 2060 ms 12136 KB Time limit exceeded
21 Halted 0 ms 0 KB -