Submeter | Todas submissőes | Melhores | Voltar |
SIMUL09 - Simulador |
Um novo processador, denominado Faíska, está sendo desenvolvido para a empresa SBC. Este novo processador tem apenas duas instruções: inversão e soma, descritas a seguir.
- Inversão: dados dois endereços de memória X e Y , a operação inverte(X,Y) inverte a posição de palavras da memória de forma que
- a palavra no endereço X troca de posição com a palavra de memória da posição Y;
- a palavra no endereço X + 1 troca de posição com a palavra de memória da posição Y − 1;
- a palavra no endereço X + 2 troca de posição com a palavra de memória da posição Y − 2;
- e assim por diante, até que X ≥ Y.
- Soma: dados dois endereços de memória X e Y, a operação soma(X,Y) imprime a soma das palavras de memória entre os endereços X e Y (inclusive).
Por exemplo, se a memória contém inicialmente, a partir da primeira posição de memória (endereço igual a 1) os valores [1,2,3,4,5,6,7,8], a operação inverte(3,7) deixa a memória igual a [1,2,7,6,5,4,3,8]. Então, nesse estado, a execução de soma(1,3) produz a saída 10.
Tarefa
Sua tarefa é escever um programa que, dada uma sequência de instruções do Faíska, simule a execução e produza o mesmo resultado que o Faíska produziria.
Entrada
A entrada contém um único conjunto de testes, que deve ser lido do dispositivo de entrada padrão (normalmente o teclado).
A primeira linha da entrada contém dois números inteiros N e M, representando respectivamente o número palavras na memória (1 ≤ N ≤ 109) e o número de instruções do programa (1 ≤ M ≤ 1000). Cada uma das M linhas seguintes contém uma instrução do Faíska. Cada instrução é composta de um caratere descrevendo a instrução (‘I’ para inversão e ‘S’ para soma), seguido de um espaço, seguido de dois inteiros indicando os argumentos da instrução.
Inicialmente a configuração da memória é tal que cada palavra tem como conteúdo o seu próprio endereço. Em outras palavras, o conteúdo inicial da memória é [1,2,3,. . .,N]. Há pelo menos uma instrução soma em cada caso de teste.
Saída
Seu programa deve imprimir, na saída padrão, uma sequência de números inteiros, um em cada linha, indicando a saída gerada pelo Faíska.
Exemplos
Entrada 10 2 I 1 5 S 3 7 Saída 19 Entrada 15 4 S 2 11 I 10 15 I 1 10 S 5 10 Saída 65 21
Adicionado por: | Wanderley Guimarăes |
Data: | 2012-06-03 |
Tempo limite: | 1s |
Tamanho do fonte: | 50000B |
Memory limit: | 1536MB |
Cluster: | Cube (Intel G860) |
Linguagem permitida: | Todas exceto: ASM64 CLOJURE ERL FSHARP PERL6 PY_NBC SCALA TCL |
Origem: | OBI 2009 - fase 2 nível 2 |
hide comments
|
|||||
2017-07-13 00:54:26
não é vector @Ricardo Kim é list |
|||||
2016-09-08 18:01:03 Ricardo Kim
Alguém poderia dizer como diabos se faz para alocar um vetor de tamanho 10^9 (1.000.000.000, sim 1 bilhão) na linguagem C?, Obrigado |
|||||
2014-02-25 01:19:32 Marcos Kawakami
Considerem M <= 3000. Por algum motivo o valor ficou errado. |
|||||
2014-02-24 16:03:42 Rafael Quirino
Last edit: 2014-02-24 17:07:38 |
|||||
2013-04-03 12:20:52 Rubens Bezerra
O "M" aqui nessa página tem máximo 1000, mas na prova oficial da obi tem 3000. Qual eu devo levar em conta? |
|||||
2012-08-07 22:26:28 Gustavo Nascimento
"erro em tempo de execuçăo (SIGSEGV)" significa que enquanto executava o programa deu erro... "SIGSEGV" é a flag do sistema para indicar qqr tipo de estouro de memória... |
|||||
2012-08-01 16:45:41 Luiz Felype Tabosa Porto
Meu Programa esta dando erro em tempo de execuçăo (SIGSEGV), o que significa esse erro?!?!? |
|||||
2012-06-11 20:54:04 PTR
Tempo limite excedido. Tá difícil... Last edit: 2012-06-12 19:41:34 |
|||||
2012-06-11 00:28:32 Marcos Kawakami
Meu código passou com O(M^2), sem preocupaçőes com otimizaçőes. |
|||||
2012-06-10 17:43:33 Artur Freitas
Queria saber isso tbm. Qual a complexidade esperada ? |