답안 #922705

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
922705 2024-02-06T03:35:49 Z salmon 벽 칠하기 (APIO20_paint) C++14
0 / 100
3 ms 8540 KB
#include "paint.h"
#include <bits/stdc++.h>
using namespace std;

set<int> lst[100100];
vector<int> pos[50100];
vector<int> contract[100100];
bool can[100100];
bool l[100100];

int minimumInstructions(int N, int M, int K, vector<int> C,
    vector<int> A, vector<vector<int>> B) {

    for(int i = 0; i < N; i++){
        pos[C[i]].push_back(i);
        can[i] = false;
    }

    for(int i = 0; i < M; i++){
        for(int j : B[i]){
            for(int k : pos[j]){
                contract[k].push_back(i);
            }
        }
    }

    vector<pair<int,int>> v;

    for(int i = 0; i < N; i++){
        int it = 0;
        int it1 = 0;

        vector<pair<int,int>> temp;
        if(contract[i].size() != 0 && contract[i][0] == 0){
            if(!v.empty() && v.back().first == N - 1){
                temp.push_back({0,v.back().second + 1 });
                v.pop_back();
            }
            else{
                temp.push_back({0,1});
            }
        }

        while(it < v.size() && it1 < contract[i].size()){
            if((v[it].first + 1) % M == contract[i][it1]){
                temp.push_back({v[it].first + 1,v[it].second + 1});
                if(v[it].second + 1 >= M){
                    can[i] = true;
                }
            }

            if(v[it].first + 1 <= contract[i][it1]){
                it++;
            }
            else{
                it1++;
            }
        }
    }


    for(int i = 0; i < N; i++){
        if(can[i + M - 1 % N]) l[i] = true;
        else l[i] = false;
    }

    int ans = 1100100100;

    if(!l[0]) return -1;

    int cont = 1;
    int r = 0;
    int go = N - 1;
    int it = 0;
    int take = 0;

    while(r < go){
        cont++;
        take = r;
        while(it < r){
            it++;
            if(l[it]){
                take = it + M - 1;
            }
        }

        if(take == r){
            cont = 1100100100;
            break;
        }
        r = take;
    }

    ans = min(ans,cont);


    if(ans == 1100100100) return -1;

    return ans;
}

Compilation message

paint.cpp: In function 'int minimumInstructions(int, int, int, std::vector<int>, std::vector<int>, std::vector<std::vector<int> >)':
paint.cpp:44:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   44 |         while(it < v.size() && it1 < contract[i].size()){
      |               ~~~^~~~~~~~~~
paint.cpp:44:36: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   44 |         while(it < v.size() && it1 < contract[i].size()){
      |                                ~~~~^~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 8540 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 8540 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 8540 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 8540 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 8540 KB Output isn't correct
2 Halted 0 ms 0 KB -