제출 #412996

#제출 시각아이디문제언어결과실행 시간메모리
412996OzyGroup Photo (JOI21_ho_t3)C++17
0 / 100
1 ms204 KiB
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for (int i = (a); i <= (b); i++)
#define repa(i,a,b) for (int i = (a); i >= (b); i--)
#define lli long long int
#define debugsl(a) cout << #a << " = " << a << ", "
#define debug(a) cout << #a << " = " << a << endl
#define debugarr(x,a,b) cout << #x << " = ["; rep(iii, a, b) cout << x[iii] << ", "; cout << "]\n"

#define MAX 5000

lli n,res,pos,ant,ult,a,b, ind, mi, md, indi, indd, pi, pd;
lli arr[MAX+2],dir[MAX+2];
vector<lli> sol;

bool correcto(lli pos, lli x){
    return pos >= sol.size() || sol[pos] == x - 1;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    cin >> n;
    rep(i,1,n) cin >> arr[i];

    sol.push_back(1);

    rep(act,2,n) {
        ult = 0;
        rep(i,1,n){
            if (arr[i] < act) ult = arr[i];
            if (arr[i] == act) {
                pos = i;
                break;
            }
        }

        if (!ult) ind = 0;
        else{
            rep(i, 0, sol.size() - 1) if (sol[i] == ult){
                ind = i + 1;
                break;
            }
        }
        // IND TIENE EL PRIMER ELEMENTO DE LOS MENORES DESPUES QUE EL

        indi = mi = pi = -10000000;
        repa(i, ind, 0) if (correcto(i, act)){
            indi = i;
            if (indi < sol.size()) mi = sol[i];
            break;
        }
        if (indi == sol.size()){
            sol.push_back(act);
            continue;
        }


        rep(i, ind + 1, sol.size()) if (correcto(i, act)){
            indd = i - 1;
            md = sol[i - 1];
            break;
        }

        rep(i, 1, n) if (arr[i] == mi){ pi = i; break; }
        rep(i, 1, n) if (arr[i] == md){ pd = i; break; }


        if (pi > pos){
            sol.push_back(act);
            repa(i, sol.size() - 1, 1){
                swap(sol[i], sol[i - 1]);
                if (sol[i] == mi) break;
            }
            continue;
        }

        if (pos - pi <= pd - pos){
            repa(i, pos, pi + 1) swap(arr[i], arr[i - 1]);
            res += pos - pi;
            sol.push_back(act);
            repa(i, sol.size() - 1, 1){
                swap(sol[i], sol[i - 1]);
                if (sol[i] == mi) break;
            }
        }
        else {
            rep(i, pos, pd - 1) swap(arr[i], arr[i + 1]);
            res += pd - pos;
            sol.push_back(act);
            repa(i, sol.size() - 1, 1){
                swap(sol[i], sol[i - 1]);
                if (sol[i] == md){
                    swap(sol[i], sol[i - 1]);
                    break;
                }
            }
        }

    }

    cout << res;

    return 0;
}

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

Main.cpp: In function 'bool correcto(long long int, long long int)':
Main.cpp:18:16: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   18 |     return pos >= sol.size() || sol[pos] == x - 1;
      |            ~~~~^~~~~~~~~~~~~
Main.cpp: In function 'int main()':
Main.cpp:4:40: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    4 | #define rep(i,a,b) for (int i = (a); i <= (b); i++)
      |                                        ^
Main.cpp:43:13: note: in expansion of macro 'rep'
   43 |             rep(i, 0, sol.size() - 1) if (sol[i] == ult){
      |             ^~~
Main.cpp:53:22: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |             if (indi < sol.size()) mi = sol[i];
      |                 ~~~~~^~~~~~~~~~~~
Main.cpp:56:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   56 |         if (indi == sol.size()){
      |             ~~~~~^~~~~~~~~~~~~
Main.cpp:4:40: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    4 | #define rep(i,a,b) for (int i = (a); i <= (b); i++)
      |                                        ^
Main.cpp:62:9: note: in expansion of macro 'rep'
   62 |         rep(i, ind + 1, sol.size()) if (correcto(i, act)){
      |         ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...