제출 #1245100

#제출 시각아이디문제언어결과실행 시간메모리
1245100GabrielPaint By Numbers (IOI16_paint)C++20
59 / 100
0 ms328 KiB
#include "paint.h"
#include <bits/stdc++.h>
using namespace std;
string solve_puzzle(string s, vector<int> c){
    int n = s.size(), k = c.size();
    string r;
    vector<bool> No_blanco(n), Negro(n), Pieza(n);
    vector< pair<int, int> > L_mites(k), Otros_extremos(k);
    int i = 0;
    for(int j = 0; j < k; j++){
        int Bien = 0, Inicio = i;
        for(int ci = i; ci < n; ci++){
            if(s[ci] == '_'){
                Inicio = ci + 1;
                Bien = 0;
            }
            if(s[ci] == '.') Bien++;
            if(Bien == c[j]){
                Otros_extremos[j].second = ci;
                i = ci + 2;
                break;
            }
        }
        L_mites[j].first = Inicio;
    }
    i = n - 1;
    for(int j = k - 1; j > -1; j--){
        int Bien = 0, Inicio = i;
        for(int ci = i; ci > -1; ci--){
            if(s[ci] == '_'){
                Inicio = ci - 1;
                Bien = 0;
            }
            if(s[ci] == '.') Bien++;
            if(Bien == c[j]){
                Otros_extremos[j].first = ci;
                i = ci - 2;
                break;
            }
        }
        L_mites[j].second = Inicio;
    }
    for(int i = 0; i < k; i++){
        for(; Otros_extremos[i].first <= Otros_extremos[i].second; Otros_extremos[i].first++){
            Negro[Otros_extremos[i].first] = 1;
        }
        int Copia = L_mites[i].first, Bien = 0;
        for(; L_mites[i].first <= L_mites[i].second; L_mites[i].first++){
            No_blanco[L_mites[i].first] = 1;
            if(s[L_mites[i].first] == '.') Bien++;
            if(s[L_mites[i].first] == '_'){
                Bien = 0;
                Copia = L_mites[i].first + 1;
            }
            if(Bien >= c[i]){
                for(; Copia <= L_mites[i].first; Copia++){
                    Pieza[Copia] = 1;
                }
            }
        }
    }
    for(int i = 0; i < n; i++){
        if(s[i] != '.'){
            r += s[i];
            continue;
        }
        if(!Pieza[i]) r += '_';
        else if(Negro[i]) r += 'X';
        else if(No_blanco[i]) r += '?';
        else r += '_';
    }
    return r;
}

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

paint.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
paint_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...