답안 #461332

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
461332 2021-08-09T21:10:46 Z julian33 Karte (COCI18_karte) C++14
12 / 120
54 ms 9064 KB
#include <bits/stdc++.h>

using namespace std;

#ifdef LOCAL
#define deb(...) logger(#__VA_ARGS__, __VA_ARGS__)
template<typename ...Args>
void logger(string vars, Args&&... values) {
    cerr<<vars<<" = ";
    string delim="";
    (...,(cerr<<delim<<values,delim=", "));
    cerr<<"\n";
}
#else
#define deb(...) logger(#__VA_ARGS__, __VA_ARGS__)
template<typename ...Args>
void logger(string vars, Args&&... values) {}
#endif

#define pb push_back
#define sz(x) (int)(x.size())
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
template<typename T> inline void maxa(T& a,T b){a=max(a,b);}
template<typename T> inline void mina(T& a,T b){a=min(a,b);} 
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

const int mxN=1e5+5; //make sure this is right
const int mod=1e9+7;

int main(){
    cin.sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    #ifdef LOCAL
        freopen("input.txt","r",stdin);
        freopen("output.txt","w",stdout);
    #endif

    int n,k; cin>>n>>k;
    int cnt=0;
    vector<int> a(n),f(n),amt(n);
    for(int &i:a)
        cin>>i;
    for(int i=n-1;i>=0;i--){
        if(cnt<a[i]){ //false
            f[i]=1;
            cnt++;
        }
        amt[i]=cnt;
    }
    for(int i=0;i<n-1;i++){
        if(!f[i+1]){
            if(cnt<k){
                if(a[i+1]<a[i]){
                    swap(a[i],a[i+1]);
                    swap(f[i],f[i+1]);
                }
            } else{
                if(a[i+1]>a[i]){
                    swap(a[i+1],a[i]);
                    swap(f[i],f[i+1]);
                }
            }
            continue;
        }
        if(cnt<k && !f[i]){
            swap(a[i],a[i+1]);
            swap(amt[i],amt[i+1]);
            amt[i+1]--;
            if(amt[i+1]<a[i+1]){
                f[i+1]=1;
                cnt++;
                deb(cnt,i+1,amt[i+1],a[i+1]);
            }
        } else if(cnt>k && f[i]){
            swap(a[i],a[i+1]);
            swap(amt[i],amt[i+1]);
            amt[i]++;
            if(amt[i]>=a[i]){
                cnt--;
            }
            amt[i+1]--;
        }
    }
    deb(cnt);
    if(cnt!=k){
        cout<<-1<<"\n";
        return 0;
    }
    for(int i=0;i<n;i++)
        cout<<a[i]<<" \n"[i==n-1];
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 332 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 332 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 332 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 332 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 12 ms 2112 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 23 ms 3824 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 54 ms 9064 KB Output isn't correct
2 Halted 0 ms 0 KB -