feat(queue): new queue problem formated
This commit is contained in:
97
o-problema-dos-pacotes-viajantes/Makefile
Normal file
97
o-problema-dos-pacotes-viajantes/Makefile
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
# Normal directories
|
||||||
|
SRC_DIR := src
|
||||||
|
BIN_DIR := bin
|
||||||
|
DBG_DIR := bin/debug
|
||||||
|
|
||||||
|
# Grader directories
|
||||||
|
GRADER := $(wildcard $(SRC_DIR)/grader.cpp)
|
||||||
|
GRADER_DIR := $(SRC_DIR)/grader
|
||||||
|
HANDLER_DIR := $(SRC_DIR)/handler
|
||||||
|
|
||||||
|
GRADER_SRC := $(wildcard $(GRADER_DIR)/*.cpp)
|
||||||
|
GRADER_BIN := $(patsubst $(GRADER_DIR)/%.cpp, $(BIN_DIR)/%, $(GRADER_SRC))
|
||||||
|
GRADER_DBG := $(patsubst $(GRADER_DIR)/%.cpp, $(DBG_DIR)/%, $(GRADER_SRC))
|
||||||
|
|
||||||
|
# Change CPP source directories if grader is defined
|
||||||
|
ifdef GRADER
|
||||||
|
SRC := $(wildcard $(HANDLER_DIR)/*.cpp)
|
||||||
|
BIN := $(patsubst $(HANDLER_DIR)/%.cpp, $(BIN_DIR)/%, $(SRC))
|
||||||
|
DBG := $(patsubst $(HANDLER_DIR)/%.cpp, $(DBG_DIR)/%, $(SRC))
|
||||||
|
else
|
||||||
|
SRC := $(wildcard $(SRC_DIR)/*.cpp)
|
||||||
|
BIN := $(patsubst $(SRC_DIR)/%.cpp, $(BIN_DIR)/%, $(SRC))
|
||||||
|
DBG := $(patsubst $(SRC_DIR)/%.cpp, $(DBG_DIR)/%, $(SRC))
|
||||||
|
endif
|
||||||
|
|
||||||
|
SRC_C := $(wildcard $(SRC_DIR)/*.c)
|
||||||
|
BIN_C := $(patsubst $(SRC_DIR)/%.c, $(BIN_DIR)/%, $(SRC_C))
|
||||||
|
DBG_C := $(patsubst $(SRC_DIR)/%.c, $(DBG_DIR)/%, $(SRC_C))
|
||||||
|
|
||||||
|
SRC_JAVA := $(wildcard $(SRC_DIR)/*.java)
|
||||||
|
BIN_JAVA := $(patsubst $(SRC_DIR)/%.java, $(BIN_DIR)/%.class, $(SRC_JAVA))
|
||||||
|
DBG_JAVA := $(patsubst $(SRC_DIR)/%.java, $(DBG_DIR)/%.class, $(SRC_JAVA))
|
||||||
|
|
||||||
|
CHECKER := $(wildcard $(SRC_DIR)/checker.cpp)
|
||||||
|
|
||||||
|
C := gcc
|
||||||
|
CPP := g++
|
||||||
|
CXX_FLAGS := -Wall -O2
|
||||||
|
DEBUG_FLAGS := -Wall -g
|
||||||
|
BOCA_FLAGS := -static -DBOCA_SUPPORT
|
||||||
|
|
||||||
|
JV = javac
|
||||||
|
JV_DEBUG = -g
|
||||||
|
JV_DIR = -d bin
|
||||||
|
JV_DBG_DIR = -d bin/debug
|
||||||
|
|
||||||
|
.PHONY: all debug release checker clean
|
||||||
|
|
||||||
|
all: debug release checker
|
||||||
|
|
||||||
|
debug: $(DBG) $(DBG_C) $(DBG_JAVA) $(GRADER_DBG)
|
||||||
|
|
||||||
|
release: $(BIN) $(BIN_C) $(BIN_JAVA) $(GRADER_BIN)
|
||||||
|
|
||||||
|
ifdef CHECKER
|
||||||
|
checker: $(DBG_DIR)/checker-boca $(BIN_DIR)/checker-boca
|
||||||
|
endif
|
||||||
|
|
||||||
|
$(BIN): $(BIN_DIR)/% : $(SRC_DIR)/%.cpp | $(BIN_DIR)
|
||||||
|
$(CPP) $(CXX_FLAGS) $^ -o $@
|
||||||
|
|
||||||
|
$(DBG): $(DBG_DIR)/% : $(SRC_DIR)/%.cpp | $(DBG_DIR)
|
||||||
|
$(CPP) $(DEBUG_FLAGS) $^ -o $@
|
||||||
|
|
||||||
|
$(BIN_C): $(BIN_DIR)/% : $(SRC_DIR)/%.c | $(BIN_DIR)
|
||||||
|
$(C) $(CXX_FLAGS) $^ -o $@
|
||||||
|
|
||||||
|
$(DBG_C): $(DBG_DIR)/% : $(SRC_DIR)/%.c | $(DBG_DIR)
|
||||||
|
$(C) $(DEBUG_FLAGS) $^ -o $@
|
||||||
|
|
||||||
|
$(BIN_JAVA): $(BIN_DIR)/%.class : $(SRC_DIR)/%.java | $(BIN_DIR)
|
||||||
|
$(JV) $(JV_DIR) $^
|
||||||
|
|
||||||
|
$(DBG_JAVA): $(DBG_DIR)/%.class : $(SRC_DIR)/%.java | $(DBG_DIR)
|
||||||
|
$(JV) $(JV_DEBUG) $(JV_DBG_DIR) $^
|
||||||
|
|
||||||
|
$(GRADER_BIN): $(BIN_DIR)/% : $(GRADER_DIR)/%.cpp $(GRADER) $(GRADER_DIR)/*.h
|
||||||
|
$(CPP) $(CXX_FLAGS) $^ -o $@
|
||||||
|
|
||||||
|
$(GRADER_DBG): $(DBG_DIR)/% : $(GRADER_DIR)/%.cpp $(GRADER) $(GRADER_DIR)/*.h
|
||||||
|
$(CPP) $(DEBUG_FLAGS) $^ -o $@
|
||||||
|
|
||||||
|
$(BIN_DIR):
|
||||||
|
mkdir -p $@
|
||||||
|
|
||||||
|
$(DBG_DIR):
|
||||||
|
mkdir -p $@
|
||||||
|
|
||||||
|
$(BIN_DIR)/checker-boca: $(SRC_DIR)/checker.cpp
|
||||||
|
$(CPP) $(CXX_FLAGS) $(BOCA_FLAGS) $^ -o $@
|
||||||
|
|
||||||
|
$(DBG_DIR)/checker-boca: $(SRC_DIR)/checker.cpp
|
||||||
|
$(CPP) $(DEBUG_FLAGS) $(BOCA_FLAGS) $^ -o $@
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@echo Cleaning problem files
|
||||||
|
rm -rf bin
|
||||||
5
o-problema-dos-pacotes-viajantes/input/1
Normal file
5
o-problema-dos-pacotes-viajantes/input/1
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
1
|
||||||
|
3 2 2
|
||||||
|
2 3 2
|
||||||
|
1 3
|
||||||
|
0
|
||||||
188
o-problema-dos-pacotes-viajantes/maratona.cls
Normal file
188
o-problema-dos-pacotes-viajantes/maratona.cls
Normal file
@@ -0,0 +1,188 @@
|
|||||||
|
\ProvidesPackage{maratona}
|
||||||
|
\LoadClass[11pt]{article}
|
||||||
|
|
||||||
|
% remove page numbers
|
||||||
|
\pagenumbering{gobble}
|
||||||
|
|
||||||
|
\RequirePackage{fancyhdr}
|
||||||
|
|
||||||
|
\RequirePackage{tabularx,colortbl}
|
||||||
|
|
||||||
|
%\RequirePackage{arial}
|
||||||
|
\RequirePackage{ifpdf}
|
||||||
|
\RequirePackage[T1]{fontenc}
|
||||||
|
\RequirePackage[utf8]{inputenc}
|
||||||
|
\RequirePackage[portuguese]{babel}
|
||||||
|
\RequirePackage{graphics}
|
||||||
|
\RequirePackage{graphicx}
|
||||||
|
\RequirePackage{amssymb,amsmath,wrapfig}
|
||||||
|
\RequirePackage{xcolor,colortbl}
|
||||||
|
\RequirePackage{xcolor}
|
||||||
|
\RequirePackage{ifthen}
|
||||||
|
\oddsidemargin 0cm
|
||||||
|
\evensidemargin -2cm
|
||||||
|
\topmargin -1cm
|
||||||
|
\textwidth 16cm
|
||||||
|
\textheight 23cm
|
||||||
|
|
||||||
|
\ifpdf
|
||||||
|
\RequirePackage[pdftex]{hyperref}
|
||||||
|
\else
|
||||||
|
\RequirePackage[hypertex]{hyperref}
|
||||||
|
\fi
|
||||||
|
|
||||||
|
|
||||||
|
\newcommand{\var}[1]{\ensuremath{{#1}}}
|
||||||
|
|
||||||
|
|
||||||
|
\hypersetup{
|
||||||
|
letterpaper,
|
||||||
|
colorlinks=true,
|
||||||
|
linkcolor=blue,
|
||||||
|
urlcolor=blue,
|
||||||
|
pdfpagemode=none,
|
||||||
|
pdftitle={IV Maratona de Programação do IFB \today},
|
||||||
|
pdfauthor={},
|
||||||
|
pdfsubject={Caderno de problemas da IV Maratona de Programação do IFB },
|
||||||
|
pdfkeywords={maratona, programação, IFB}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
\DeclareGraphicsExtensions{png}
|
||||||
|
|
||||||
|
\lhead{DS Contest Tools}
|
||||||
|
\pagestyle{fancy}
|
||||||
|
|
||||||
|
% Capa
|
||||||
|
\newenvironment{Maratona}[3]
|
||||||
|
{
|
||||||
|
\begin{titlepage}
|
||||||
|
\begin{center}
|
||||||
|
|
||||||
|
\vspace{1cm}
|
||||||
|
\Large{\textbf{#1}} \\
|
||||||
|
\vspace{1cm}
|
||||||
|
{\textbf{Caderno de Problemas}} \\
|
||||||
|
\vspace{1cm}
|
||||||
|
\begin{small}
|
||||||
|
\textsl{#2}
|
||||||
|
\end{small} \\
|
||||||
|
\begin{figure}[htp]
|
||||||
|
\begin{center}
|
||||||
|
\includegraphics[scale=1]{logos/logo-maratona.png}
|
||||||
|
\end{center}
|
||||||
|
\end{figure}
|
||||||
|
{(Este caderno contém {#3} problemas)} \\
|
||||||
|
\vspace{1cm}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
\vfill
|
||||||
|
\begin{small}
|
||||||
|
{QNM 40, Área Especial nº 01,
|
||||||
|
Taguatinga/DF, 72146-000 ,
|
||||||
|
Brasil } \\
|
||||||
|
{Telefone (61) 2103-2200 \\http://www.ifb.edu.br/taguatinga} \\
|
||||||
|
\end{small}
|
||||||
|
\end{center}
|
||||||
|
\end{titlepage}
|
||||||
|
}
|
||||||
|
|
||||||
|
\newcommand{\Organizacao}[2]{
|
||||||
|
{\small \vfill
|
||||||
|
\begin{center}
|
||||||
|
|
||||||
|
\textbf{Comissão Organizadora:} \\
|
||||||
|
{#1} \\
|
||||||
|
\bigskip
|
||||||
|
\textbf{Apoio:}\\
|
||||||
|
{#2}
|
||||||
|
\end{center}
|
||||||
|
}
|
||||||
|
\vfill
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
% Problema
|
||||||
|
\newcounter{problem}
|
||||||
|
\newenvironment{Problema}[4]{
|
||||||
|
\stepcounter{problem}
|
||||||
|
\newpage
|
||||||
|
\begin{center}
|
||||||
|
\Large{\ifthenelse{\equal{#1}{}}{\textbf{{#2}}}{\textbf{Problema {#1} -- {#2} }}}{\\\footnotesize \textbf{Limite de tempo: {#3}s}}{\\[-0.1cm]\footnotesize \textbf{Limite de memória: {#4}MB}}
|
||||||
|
\end{center}
|
||||||
|
}
|
||||||
|
|
||||||
|
\newcounter{problemAutor}
|
||||||
|
\newenvironment{ProblemaAutor}[5]{
|
||||||
|
\stepcounter{problemAutor}
|
||||||
|
\newpage
|
||||||
|
\begin{center}
|
||||||
|
\Large{\ifthenelse{\equal{#1}{}}{\textbf{{#2}}}{\textbf{Problema {#1} -- {#2} }}}{\\\footnotesize \textbf{Limite de tempo: {#3}s}}{\\[-0.1cm]\footnotesize \textbf{Limite de memória: {#4}MB\\}}{
|
||||||
|
\footnotesize Autor: {#5}
|
||||||
|
}
|
||||||
|
\end{center}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
% Código-fonte
|
||||||
|
\newcommand{\codigofonte}[1]{Nome do arquivo fonte: {#1}}
|
||||||
|
|
||||||
|
% Entrada
|
||||||
|
\newcommand{\Entrada}{
|
||||||
|
\bigskip
|
||||||
|
\begin{large}
|
||||||
|
\textbf{Entrada} \\
|
||||||
|
\end{large}
|
||||||
|
}
|
||||||
|
|
||||||
|
% Saida
|
||||||
|
\newcommand{\Saida}{
|
||||||
|
\bigskip
|
||||||
|
\begin{large}
|
||||||
|
\textbf{Saída} \\
|
||||||
|
\end{large}
|
||||||
|
}
|
||||||
|
|
||||||
|
\newcommand{\Interacao}{
|
||||||
|
\bigskip
|
||||||
|
\begin{large}
|
||||||
|
\textbf{Interação} \\
|
||||||
|
\end{large}
|
||||||
|
}
|
||||||
|
|
||||||
|
\newcommand{\Notas}{
|
||||||
|
\bigskip
|
||||||
|
\begin{large}
|
||||||
|
\textbf{Notas} \\
|
||||||
|
\end{large}
|
||||||
|
}
|
||||||
|
|
||||||
|
% Exemplo
|
||||||
|
\newenvironment{Exemplo}
|
||||||
|
{
|
||||||
|
|
||||||
|
\tabularx{\textwidth}{XX}
|
||||||
|
% {@{\extracolsep{\fill}}|l|l|}
|
||||||
|
% {|l|l@{\extracolsep{\fill}|}}
|
||||||
|
\hline
|
||||||
|
Entrada & Saída \\\hline
|
||||||
|
}
|
||||||
|
{
|
||||||
|
\hline
|
||||||
|
\endtabularx
|
||||||
|
}
|
||||||
|
|
||||||
|
% Exemplo de Entrada
|
||||||
|
\newenvironment{ExemploEntrada}
|
||||||
|
{
|
||||||
|
\bigskip
|
||||||
|
\begin{large}
|
||||||
|
\textbf{Exemplo} \\
|
||||||
|
\end{large}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
% Sample Output
|
||||||
|
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
\documentclass{maratona}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
\begin{ProblemaAutor}{}{O Problema dos Pacotes Viajantes}{3}{256}{UVA - 10172}
|
||||||
|
|
||||||
|
O sistema de entregas automáticas da cidade de Logitown é composto por um anel de estações interligadas. Em cada estação, pequenas encomendas aguardam para serem levadas até seus destinos, que também são outras estações do mesmo anel.
|
||||||
|
|
||||||
|
Um único carrinho autônomo é responsável por realizar todas as entregas. Ele percorre continuamente as estações em ordem crescente: após visitar a estação $N$, retorna para a estação $1$, repetindo o ciclo até que todas as encomendas tenham sido entregues. No início da operação, o carrinho está vazio e parado na estação $1$.
|
||||||
|
|
||||||
|
Cada estação possui duas plataformas de operação:
|
||||||
|
\begin{itemize}
|
||||||
|
\item \textbf{Plataforma A}: recebe as encomendas que chegaram ao seu destino final.
|
||||||
|
\item \textbf{Plataforma B}: mantém uma fila de encomendas que ainda precisam ser enviadas para outras estações.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
O carrinho possui uma pilha interna com capacidade limitada, utilizada para armazenar as encomendas em trânsito. Como se trata de uma pilha, apenas a encomenda localizada no topo pode ser retirada. Ao chegar a uma estação, o carrinho inicia o processo de \textbf{descarregamento}: ele retira do topo da pilha todas as encomendas destinadas àquela estação, uma a uma, depositando-as na plataforma A. Se encontrar uma encomenda destinada a outra estação, ele tenta colocá-la na fila da plataforma B, caso haja espaço disponível. Se a fila estiver cheia, o descarregamento é interrompido.
|
||||||
|
|
||||||
|
Em seguida, ocorre o \textbf{carregamento}: o carrinho pega, na ordem da fila da plataforma B, as encomendas que aguardam envio e as adiciona ao topo da pilha, até que esta atinja sua capacidade máxima ou a fila fique vazia.
|
||||||
|
|
||||||
|
Cada operação de carregamento ou descarregamento de uma encomenda leva exatamente $1$ minuto, enquanto o deslocamento entre duas estações consecutivas consome $2$ minutos. O processo continua até que não restem encomendas no carrinho nem em nenhuma das plataformas B.
|
||||||
|
|
||||||
|
Dado o estado inicial das plataformas, determine o tempo total necessário para que todas as encomendas sejam entregues às suas respectivas estações.
|
||||||
|
|
||||||
|
\Entrada
|
||||||
|
|
||||||
|
A primeira linha contém um inteiro $T$ $(1 \le T \le 100)$ indicando o número de conjuntos de teste.
|
||||||
|
|
||||||
|
Cada conjunto de teste começa com três inteiros $N$, $S$ e $Q$, onde $N$ $(2 \le N \le 100)$ é o número de estações no anel, $S$ $(1 \le S \le 100)$ é a capacidade máxima do carrinho (em encomendas), e $Q$ $(1 \le Q \le 100)$ é a capacidade máxima da fila de cada estação.
|
||||||
|
|
||||||
|
Em seguida, seguem $N$ linhas. A $i$-ésima linha contém um inteiro $q_i$ $(0 \le q_i \le Q)$ indicando o número de encomendas na fila da estação $i$, seguido de $q_i$ inteiros representando os destinos dessas encomendas $(1 \le \text{destino} \le N, \ \text{destino} \ne i)$, listados da frente para o fim da fila.
|
||||||
|
|
||||||
|
\Saida
|
||||||
|
|
||||||
|
Para cada conjunto de teste, deve-se imprimir um único número inteiro representando o total de minutos necessários para que todas as encomendas sejam entregues às plataformas A correspondentes.
|
||||||
|
|
||||||
|
\ExemploEntrada
|
||||||
|
\begin{Exemplo}
|
||||||
|
\texttt{1} & \texttt{12}\\
|
||||||
|
\texttt{3~2~2} & \\
|
||||||
|
\texttt{2~3~2} & \\
|
||||||
|
\texttt{1~3} & \\
|
||||||
|
\texttt{0} & \\
|
||||||
|
\end{Exemplo}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
\Notas
|
||||||
|
|
||||||
|
Neste caso de teste, o sistema conta com três estações dispostas em anel. O carrinho inicia vazio na estação 1, e cada estação possui capacidade máxima de duas encomendas em sua fila (plataforma B). O objetivo é calcular o tempo total necessário para que todas as encomendas sejam entregues em suas respectivas estações de destino.
|
||||||
|
|
||||||
|
\textbf{Passo a passo da simulação:}
|
||||||
|
|
||||||
|
\begin{enumerate}
|
||||||
|
\item \textbf{Estação 1:} o carrinho carrega as duas encomendas disponíveis na fila B, com destinos 2 e 3. Cada carregamento leva $1$ minuto, totalizando $2$ minutos.
|
||||||
|
A pilha do carrinho fica [2, 3] (2 no topo), e a fila B torna-se vazia.
|
||||||
|
|
||||||
|
\item \textbf{Deslocamento para a estação 2:} o trajeto até a próxima estação consome $2$ minutos.
|
||||||
|
\textit{Tempo acumulado: $4$ minutos.}
|
||||||
|
|
||||||
|
\item \textbf{Estação 2:} o carrinho descarrega a encomenda cujo destino é a própria estação (topo da pilha). Esse descarregamento consome $1$ minuto.
|
||||||
|
A pilha agora contém apenas [3]. Como a plataforma B da estação 2 ainda tem espaço para mais uma caixa e há uma caixa na pilha do carrinho, essa caixa é colocada na plataforma B, consumindo $1$ minuto.
|
||||||
|
Em seguida, o carrinho carrega duas novas encomendas da fila B, destinadas à estação 3, gastando mais $2$ minuto.
|
||||||
|
\textit{Tempo acumulado: $8$ minutos.}
|
||||||
|
|
||||||
|
\item \textbf{Deslocamento para a estação 3:} o movimento até a próxima estação leva $2$ minutos.
|
||||||
|
\textit{Tempo acumulado: $10$ minutos.}
|
||||||
|
|
||||||
|
\item \textbf{Estação 3:} o carrinho descarrega as duas encomendas destinadas a esta estação, uma de cada vez. Cada descarregamento leva $1$ minuto, somando $2$ minutos.
|
||||||
|
\textit{Tempo acumulado: $12$ minutos.}
|
||||||
|
|
||||||
|
\item Como todas as filas das plataformas B estão vazias e o carrinho encontra-se sem encomendas, o processo é encerrado.
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
|
\textbf{Tempo total necessário:} $12$ minutos.
|
||||||
|
\end{ProblemaAutor}
|
||||||
|
\end{document}
|
||||||
1
o-problema-dos-pacotes-viajantes/output/1
Normal file
1
o-problema-dos-pacotes-viajantes/output/1
Normal file
@@ -0,0 +1 @@
|
|||||||
|
12
|
||||||
64
o-problema-dos-pacotes-viajantes/problem.json
Normal file
64
o-problema-dos-pacotes-viajantes/problem.json
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
{
|
||||||
|
"version": "1.0",
|
||||||
|
"problem": {
|
||||||
|
"title": "O Problema dos Pacotes Viajantes",
|
||||||
|
"event": "",
|
||||||
|
"time_limit": 3.0,
|
||||||
|
"memory_limit_mb": 256,
|
||||||
|
"input_file": "stdin",
|
||||||
|
"output_file": "stdout",
|
||||||
|
"interactive": false,
|
||||||
|
"grader": false,
|
||||||
|
"subject": {
|
||||||
|
"en_us": [
|
||||||
|
"queue", "stack"
|
||||||
|
],
|
||||||
|
"pt_br": [
|
||||||
|
"fila", "pilha"
|
||||||
|
],
|
||||||
|
"es": [
|
||||||
|
""
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"author": {
|
||||||
|
"name": "UVA - 10172",
|
||||||
|
"affiliation": "",
|
||||||
|
"country": "",
|
||||||
|
"email": ""
|
||||||
|
},
|
||||||
|
"build": {
|
||||||
|
"run_generator": false,
|
||||||
|
"run_validator": true,
|
||||||
|
"produce_outputs": true,
|
||||||
|
"run_checker": true,
|
||||||
|
"run_all_solutions": true,
|
||||||
|
"run_specific_solution": "",
|
||||||
|
"generate_io_only": false,
|
||||||
|
"generate_pdf_only": false,
|
||||||
|
"cpu_count": 1,
|
||||||
|
"build_pdf": true,
|
||||||
|
"pdf_format": "ds",
|
||||||
|
"io_samples": 1
|
||||||
|
},
|
||||||
|
"solutions": {
|
||||||
|
"main-ac": "ac.cpp",
|
||||||
|
"alternative-ac": [],
|
||||||
|
"wrong-answer": [],
|
||||||
|
"time-limit": [],
|
||||||
|
"time-limit-or-ac": [],
|
||||||
|
"time-limit-or-memory-limit": [],
|
||||||
|
"memory-limit": [],
|
||||||
|
"presentation-error": [],
|
||||||
|
"runtime-error": []
|
||||||
|
},
|
||||||
|
"polygon_config": {
|
||||||
|
"id": ""
|
||||||
|
},
|
||||||
|
"boca_config": {
|
||||||
|
"time_limit": 3,
|
||||||
|
"number_of_repetitions": 1,
|
||||||
|
"maximum_memory_mb": 512,
|
||||||
|
"maximum_output_size_kb": 24096
|
||||||
|
}
|
||||||
|
}
|
||||||
62
o-problema-dos-pacotes-viajantes/src/ac.cpp
Normal file
62
o-problema-dos-pacotes-viajantes/src/ac.cpp
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
#include <bits/stdc++.h>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
#define sz(x) ((int)x.size())
|
||||||
|
|
||||||
|
void solve()
|
||||||
|
{
|
||||||
|
int N, S, Q;
|
||||||
|
cin >> N >> S >> Q;
|
||||||
|
vector<queue<int>> cargoes(N);
|
||||||
|
int totalCargoes = 0;
|
||||||
|
for (int i = 0; i < N; i++)
|
||||||
|
{
|
||||||
|
int q;
|
||||||
|
cin >> q;
|
||||||
|
totalCargoes += q;
|
||||||
|
for (int j = 0; j < q; j++)
|
||||||
|
{
|
||||||
|
int c;
|
||||||
|
cin >> c;
|
||||||
|
cargoes[i].push(c - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stack<int> carrier;
|
||||||
|
int station = 0, totalTime = 0;
|
||||||
|
for (int cargoesDelivered = 0; cargoesDelivered < totalCargoes;)
|
||||||
|
{
|
||||||
|
while (!carrier.empty() && (carrier.top() == station || sz(cargoes[station]) < Q))
|
||||||
|
{
|
||||||
|
if (carrier.top() == station)
|
||||||
|
{
|
||||||
|
cargoesDelivered++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cargoes[station].push(carrier.top());
|
||||||
|
}
|
||||||
|
carrier.pop();
|
||||||
|
totalTime++;
|
||||||
|
}
|
||||||
|
while (!cargoes[station].empty() && sz(carrier) < S)
|
||||||
|
{
|
||||||
|
carrier.push(cargoes[station].front());
|
||||||
|
cargoes[station].pop();
|
||||||
|
totalTime++;
|
||||||
|
}
|
||||||
|
station = (station + 1) % N;
|
||||||
|
if (cargoesDelivered < totalCargoes)
|
||||||
|
totalTime += 2; // move to next station
|
||||||
|
}
|
||||||
|
|
||||||
|
cout << totalTime << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
int t; cin >> t;
|
||||||
|
while (t--) solve();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
19
o-problema-dos-pacotes-viajantes/src/checker.cpp
Normal file
19
o-problema-dos-pacotes-viajantes/src/checker.cpp
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
#include "testlib.h"
|
||||||
|
#include <bits/stdc++.h>
|
||||||
|
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char* argv[]) {
|
||||||
|
setName("compare two signed int%d's", 8 * int(sizeof(int)));
|
||||||
|
registerTestlibCmd(argc, argv);
|
||||||
|
|
||||||
|
int ja = ans.readInt();
|
||||||
|
int pa = ouf.readInt();
|
||||||
|
|
||||||
|
if (ja != pa)
|
||||||
|
quitf(_wa, "expected %d, found %d", ja, pa);
|
||||||
|
|
||||||
|
quitf(_ok, "answer is %d", ja);
|
||||||
|
}
|
||||||
83
o-problema-dos-pacotes-viajantes/src/generator.cpp
Normal file
83
o-problema-dos-pacotes-viajantes/src/generator.cpp
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
#include "testlib.h"
|
||||||
|
#include <bits/stdc++.h>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
const int MIN_N = 0;
|
||||||
|
const int MAX_N = 100;
|
||||||
|
|
||||||
|
const int rnd_test_n = 100;
|
||||||
|
|
||||||
|
template <typename T> void append(vector<T> &dest, const vector<T> &orig) {
|
||||||
|
dest.insert(dest.end(), orig.begin(), orig.end());
|
||||||
|
}
|
||||||
|
|
||||||
|
string output_tc(int x, int y) {
|
||||||
|
ostringstream oss;
|
||||||
|
oss << x << " " << y << endl;
|
||||||
|
return oss.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
vector<string> generate_sample_tests() {
|
||||||
|
vector<string> tests;
|
||||||
|
tests.push_back(output_tc(1, 1));
|
||||||
|
tests.push_back(output_tc(2, 2));
|
||||||
|
tests.push_back(output_tc(0, 0));
|
||||||
|
return tests;
|
||||||
|
}
|
||||||
|
|
||||||
|
vector<string> generate_manual_tests() {
|
||||||
|
vector<string> tests;
|
||||||
|
tests.push_back(output_tc(100, 0));
|
||||||
|
tests.push_back(output_tc(0, 100));
|
||||||
|
return tests;
|
||||||
|
}
|
||||||
|
|
||||||
|
string rnd_test(int i){
|
||||||
|
int min_n = MIN_N;
|
||||||
|
int max_n = MAX_N;
|
||||||
|
|
||||||
|
if(i<rnd_test_n / 3){
|
||||||
|
max_n = 5;
|
||||||
|
}
|
||||||
|
else if(i<rnd_test_n / 2){
|
||||||
|
max_n = 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
int x = rnd.next(min_n, max_n);
|
||||||
|
int y = rnd.next(min_n, max_n);
|
||||||
|
return(output_tc(x, y));
|
||||||
|
}
|
||||||
|
|
||||||
|
vector<string> generate_random_tests() {
|
||||||
|
vector<string> tests;
|
||||||
|
for (int i = 0; i < rnd_test_n; i++){
|
||||||
|
tests.push_back(rnd_test(i));
|
||||||
|
}
|
||||||
|
return tests;
|
||||||
|
}
|
||||||
|
|
||||||
|
string extreme_test_1(){
|
||||||
|
return(output_tc(100, 100));
|
||||||
|
}
|
||||||
|
|
||||||
|
vector<string> generate_extreme_tests(){
|
||||||
|
vector<string> tests;
|
||||||
|
tests.push_back(extreme_test_1());
|
||||||
|
return tests;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
registerGen(argc, argv, 1);
|
||||||
|
vector<string> tests;
|
||||||
|
size_t test = 0;
|
||||||
|
append(tests, generate_sample_tests());
|
||||||
|
append(tests, generate_manual_tests());
|
||||||
|
append(tests, generate_random_tests());
|
||||||
|
append(tests, generate_extreme_tests());
|
||||||
|
for (const auto &t : tests) {
|
||||||
|
startTest(++test);
|
||||||
|
cout << t;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
1
o-problema-dos-pacotes-viajantes/src/script.sh
Normal file
1
o-problema-dos-pacotes-viajantes/src/script.sh
Normal file
@@ -0,0 +1 @@
|
|||||||
|
generator
|
||||||
5963
o-problema-dos-pacotes-viajantes/src/testlib.h
Normal file
5963
o-problema-dos-pacotes-viajantes/src/testlib.h
Normal file
File diff suppressed because it is too large
Load Diff
33
o-problema-dos-pacotes-viajantes/src/validator.cpp
Normal file
33
o-problema-dos-pacotes-viajantes/src/validator.cpp
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
#include "testlib.h"
|
||||||
|
#include <bits/stdc++.h>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char* argv[]) {
|
||||||
|
registerValidation(argc, argv);
|
||||||
|
|
||||||
|
int t = inf.readInt(1, 100, "t");
|
||||||
|
inf.readEoln();
|
||||||
|
for (int i = 0; i < t; i++) {
|
||||||
|
int n = inf.readInt(2, 100);
|
||||||
|
inf.readSpace();
|
||||||
|
int s = inf.readInt(1, 100);
|
||||||
|
inf.readSpace();
|
||||||
|
int q = inf.readInt(1, 100);
|
||||||
|
inf.readEoln();
|
||||||
|
|
||||||
|
for (int j = 1; j <= n; j++) {
|
||||||
|
int cargoes = inf.readInt(0, q, "cargoes");
|
||||||
|
for (int k = 1; k <= cargoes; k++) {
|
||||||
|
inf.readSpace();
|
||||||
|
int destination = inf.readInt(1, n, "destination");
|
||||||
|
ensuref(j != destination, "Cargoe cannot have its station as its destination");
|
||||||
|
}
|
||||||
|
inf.readEoln();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
inf.readEof();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
17
o-problema-dos-pacotes-viajantes/statement/description.tex
Normal file
17
o-problema-dos-pacotes-viajantes/statement/description.tex
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
O sistema de entregas automáticas da cidade de Logitown é composto por um anel de estações interligadas. Em cada estação, pequenas encomendas aguardam para serem levadas até seus destinos, que também são outras estações do mesmo anel.
|
||||||
|
|
||||||
|
Um único carrinho autônomo é responsável por realizar todas as entregas. Ele percorre continuamente as estações em ordem crescente: após visitar a estação $N$, retorna para a estação $1$, repetindo o ciclo até que todas as encomendas tenham sido entregues. No início da operação, o carrinho está vazio e parado na estação $1$.
|
||||||
|
|
||||||
|
Cada estação possui duas plataformas de operação:
|
||||||
|
\begin{itemize}
|
||||||
|
\item \textbf{Plataforma A}: recebe as encomendas que chegaram ao seu destino final.
|
||||||
|
\item \textbf{Plataforma B}: mantém uma fila de encomendas que ainda precisam ser enviadas para outras estações.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
O carrinho possui uma pilha interna com capacidade limitada, utilizada para armazenar as encomendas em trânsito. Como se trata de uma pilha, apenas a encomenda localizada no topo pode ser retirada. Ao chegar a uma estação, o carrinho inicia o processo de \textbf{descarregamento}: ele retira do topo da pilha todas as encomendas destinadas àquela estação, uma a uma, depositando-as na plataforma A. Se encontrar uma encomenda destinada a outra estação, ele tenta colocá-la na fila da plataforma B, caso haja espaço disponível. Se a fila estiver cheia, o descarregamento é interrompido.
|
||||||
|
|
||||||
|
Em seguida, ocorre o \textbf{carregamento}: o carrinho pega, na ordem da fila da plataforma B, as encomendas que aguardam envio e as adiciona ao topo da pilha, até que esta atinja sua capacidade máxima ou a fila fique vazia.
|
||||||
|
|
||||||
|
Cada operação de carregamento ou descarregamento de uma encomenda leva exatamente $1$ minuto, enquanto o deslocamento entre duas estações consecutivas consome $2$ minutos. O processo continua até que não restem encomendas no carrinho nem em nenhuma das plataformas B.
|
||||||
|
|
||||||
|
Dado o estado inicial das plataformas, determine o tempo total necessário para que todas as encomendas sejam entregues às suas respectivas estações.
|
||||||
5
o-problema-dos-pacotes-viajantes/statement/input.tex
Normal file
5
o-problema-dos-pacotes-viajantes/statement/input.tex
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
A primeira linha contém um inteiro $T$ $(1 \le T \le 100)$ indicando o número de conjuntos de teste.
|
||||||
|
|
||||||
|
Cada conjunto de teste começa com três inteiros $N$, $S$ e $Q$, onde $N$ $(2 \le N \le 100)$ é o número de estações no anel, $S$ $(1 \le S \le 100)$ é a capacidade máxima do carrinho (em encomendas), e $Q$ $(1 \le Q \le 100)$ é a capacidade máxima da fila de cada estação.
|
||||||
|
|
||||||
|
Em seguida, seguem $N$ linhas. A $i$-ésima linha contém um inteiro $q_i$ $(0 \le q_i \le Q)$ indicando o número de encomendas na fila da estação $i$, seguido de $q_i$ inteiros representando os destinos dessas encomendas $(1 \le \text{destino} \le N, \ \text{destino} \ne i)$, listados da frente para o fim da fila.
|
||||||
26
o-problema-dos-pacotes-viajantes/statement/notes.tex
Normal file
26
o-problema-dos-pacotes-viajantes/statement/notes.tex
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
Neste caso de teste, o sistema conta com três estações dispostas em anel. O carrinho inicia vazio na estação 1, e cada estação possui capacidade máxima de duas encomendas em sua fila (plataforma B). O objetivo é calcular o tempo total necessário para que todas as encomendas sejam entregues em suas respectivas estações de destino.
|
||||||
|
|
||||||
|
\textbf{Passo a passo da simulação:}
|
||||||
|
|
||||||
|
\begin{enumerate}
|
||||||
|
\item \textbf{Estação 1:} o carrinho carrega as duas encomendas disponíveis na fila B, com destinos 2 e 3. Cada carregamento leva $1$ minuto, totalizando $2$ minutos.
|
||||||
|
A pilha do carrinho fica [2, 3] (2 no topo), e a fila B torna-se vazia.
|
||||||
|
|
||||||
|
\item \textbf{Deslocamento para a estação 2:} o trajeto até a próxima estação consome $2$ minutos.
|
||||||
|
\textit{Tempo acumulado: $4$ minutos.}
|
||||||
|
|
||||||
|
\item \textbf{Estação 2:} o carrinho descarrega a encomenda cujo destino é a própria estação (topo da pilha). Esse descarregamento consome $1$ minuto.
|
||||||
|
A pilha agora contém apenas [3]. Como a plataforma B da estação 2 ainda tem espaço para mais uma caixa e há uma caixa na pilha do carrinho, essa caixa é colocada na plataforma B, consumindo $1$ minuto.
|
||||||
|
Em seguida, o carrinho carrega duas novas encomendas da fila B, destinadas à estação 3, gastando mais $2$ minuto.
|
||||||
|
\textit{Tempo acumulado: $8$ minutos.}
|
||||||
|
|
||||||
|
\item \textbf{Deslocamento para a estação 3:} o movimento até a próxima estação leva $2$ minutos.
|
||||||
|
\textit{Tempo acumulado: $10$ minutos.}
|
||||||
|
|
||||||
|
\item \textbf{Estação 3:} o carrinho descarrega as duas encomendas destinadas a esta estação, uma de cada vez. Cada descarregamento leva $1$ minuto, somando $2$ minutos.
|
||||||
|
\textit{Tempo acumulado: $12$ minutos.}
|
||||||
|
|
||||||
|
\item Como todas as filas das plataformas B estão vazias e o carrinho encontra-se sem encomendas, o processo é encerrado.
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
|
\textbf{Tempo total necessário:} $12$ minutos.
|
||||||
1
o-problema-dos-pacotes-viajantes/statement/output.tex
Normal file
1
o-problema-dos-pacotes-viajantes/statement/output.tex
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Para cada conjunto de teste, deve-se imprimir um único número inteiro representando o total de minutos necessários para que todas as encomendas sejam entregues às plataformas A correspondentes.
|
||||||
Reference in New Issue
Block a user