TEMA
PROBLEM 1574 - URI Fórum 1.0
Este tema fue resuelto y no puede recibir nuevas respuestas.
-
thalyson004 respondido 9 years ago
Aparentemente vc ta pegando nas instruções "SAME AS x" somente o primeiro número de x. Ai para instruções como "SAME AS 56" vc faz como "SAME AS 5".
-
khenrique0 respondido 8 years ago
Hey pessoal, está dando 80% de erro. Testei vários casos de teste e todos bateram. Alguém tem alguma ideia do que é que está errado?
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int i=0,vet[105],x=0,j=0,y=0,t=0,cont=0,numb=0,numb2=0; char comando[30]; scanf("%i",&t); for(i=0;i<t;i++) { fflush(stdin); scanf("%i",&x); y=0; for(j=0;j<x;j++) { fflush(stdin); gets(comando); if(strcmp(comando,"LEFT")==0) { y--; vet[j] = 0; } else if(strcmp(comando,"RIGHT")==0) { y++; vet[j]= 1; } else { cont = strlen(comando); if(cont==9){ numb = comando[8]-48 ; } else if(cont==10){ numb = comando[8]-48 ; numb2 = comando[9]-48 ; numb = numb*10 + numb2; }else{ numb = 100; } if(vet[numb-1]==1) { y++; vet[j]= 1; } else { y--; vet[j]= 0; } } } printf("%i\n",y); y=0; } return 0; }
-
Abhishek8 respondido 8 years ago
I'm getting 100% WA. What's wrong?
#include <iostream> #include <sstream> using namespace std; int main() { short n; for(cin>>n;n!=0;n--) { short c,pos; short commands[101]; cin>>c; for(short i=1;i<=c;i++) { string cmd,s1,s2; short unsigned in; cin.sync(); std::getline(cin,cmd); stringstream ss(cmd); switch(cmd.length()) { case 4: commands[i] = -1; break; case 5: commands[i] = 1; break; case 9:; case 10:; case 11:ss>>s1>>s2>>in; commands[i] = commands[in]; break; default: break; } } pos = 0; for(short i=1;i<=c;i++) pos = pos + commands[i]; cout <<pos <<endl; } return 0; }
Please help. Thanks in adv.
-
DanielAlves respondido 8 years ago
Estou recebendo Wrong answer (100%), não sei o que esta errado
#include<stdio.h> #include<string.h> int main(){ int i, j, t, n; scanf("%d", &t); for(i=0; i<t; i++){ scanf("%d", &n); fflush(stdin); int p=0, k; char r[n][20]; for(j=0; j<n; j++){ scanf("%[^\n]s", r[j]); fflush(stdin); if(strcmp("LEFT", r[j]) == 0) p--; else if(strcmp("RIGHT", r[j]) == 0) p++; else if(strcmp("SAME AS", r[j]) == 0){ scanf("%d", &k); fflush(stdin); k -= 1; if(strcmp("RIGHT", r[k]) == 0){ p++; strcpy(r[j],r[k]); } else if(strcmp("LEFT", r[k]) == 0){ p--; strcpy(r[j],r[k]); } } } printf("%d\n", p); } return 0; }
-
rrfaxas respondido 8 years ago
Passa em todos os casos de teste, inclusive naquele em que tem 73 valores. Mas mesmo assim recebo WA 100%
Eu estava usando itoa e, para descobrir se ele estava dando problema, criei a função strToInt e substitui. Nenhum sucesso, continuo recebendo Wrong Answer 100%
E sobre o fflush e setbuf, gostaria de saber se eles podem estar causando algum problema. E também se aquela leitura de string até encontrar "\n" , pode causar algum problema para o Uri compilar?
Desde já agradeço, segue o código abaixo:
#include <stdio.h> #include <string.h> int strToInt(char num[3]){ int res = 0; int isDozen; if (num[1] == '\0') isDozen = 0; else isDozen = 1; if (isDozen == 1) { switch (num[0]){ case '9': res = 90; break; case '8': res = 80; break; case '7': res = 70; break; case '6': res = 60; break; case '5': res = 50; break; case '4': res = 40; break; case '3': res = 30; break; case '2': res = 20; break; case '1': res = 10; break; } switch (num[1]){ case '9': res += 9; break; case '8': res += 8; break; case '7': res += 7; break; case '6': res += 6; break; case '5': res += 5; break; case '4': res += 4; break; case '3': res += 3; break; case '2': res += 2; break; case '1': res += 1; break; } } else { switch (num[0]){ case '9': res += 9; break; case '8': res += 8; break; case '7': res += 7; break; case '6': res += 6; break; case '5': res += 5; break; case '4': res += 4; break; case '3': res += 3; break; case '2': res += 2; break; case '1': res += 1; break; } } return res; } int analyze(char a[][11], char b[11], int maxPos){ int i, pos; char num[3]; if (b[0] == 'L'){ return -1; } else if (b[0] == 'R'){ return 1; } else{ i=11; while(i>=0){ if (b[i] == '0' || b[i]=='1' || b[i] == '2' || b[i] == '3' || b[i]=='4' || b[i] == '5' || b[i] == '6' || b[i]=='7' || b[i] == '8' || b[i] == '9' ) { if(i>=8){ num[0] = b[8]; num[1] = '\0'; } if (i>=9){ num[1] = b[9]; num[2] = '\0'; } if (i>=10){ num[2] = b[10]; } pos = strToInt(num); if (a[pos-1][0] == 'R') return 1; else if (a[pos-1][0] == 'L') return -1; } i--; } } } int main() { int N,M,i,j, pos = 0, aux; char cmds[100][11]; scanf("%d", &N); for (i=0; i< N; i++){ scanf("%d", &M); fflush(stdin); pos = 0; for (j=0; j<M; j++){ scanf("%[^\n]s", &cmds[j]); setbuf(stdin, NULL); aux = analyze(cmds, cmds[j], j); if (aux == 1){ strcpy(&cmds[j], "RIGHT"); pos++; } else { strcpy(&cmds[j], "LEFT"); pos--; } } printf("%d\n", pos); } }
-
rsganzerla respondido 8 years ago
WRONG ANSWER 80% , o que eu faço?
#include <iostream> #include <string> #include <iomanip> using namespace std; int main() { int n, num, flag, i, j, pos, clas; string direcao; cin >> n; flag = 0; for (i=1; i <= n; i++) { cin >> num; int vet[num - 1]; pos = 0; for (j=0; j <= num; j++) { getline(cin, direcao); if (direcao == "RIGHT"){ pos = pos + 1; vet[j] = +1; } if (direcao == "LEFT"){ pos = pos - 1; vet[j] = -1; } if (direcao == "SAME AS"){ cin >> clas; pos = pos + vet[clas]; vet[j] = vet[clas]; } } cout << pos << endl; } return 0; }
-
antunius respondido 8 years ago
To recebendo WA80% , fiz o teste com os 73 casos acima e o meu resultado foi -12
#include <iostream> #include <vector> #include <string> #include <cstdlib> using namespace std; int main(int argc,char *argv[]) { int p=0,numero=0,t,n; string comando,left="LEFT",right="RIGHT"; string posicao; cin>>t; for(int k=0;k<t;k++){ cin>>n; char vetor[n]; cin.ignore(); for(int i=1;i<=n;i++){ getline(cin,comando); if(comando==left){ p-=1; vetor[i]='L'; posicao="LEFT"; }else{ if(comando==right){ p+=1; vetor[i]='R'; posicao="RIGHT"; }else{ if(isdigit(comando[comando.size()-1])&&(isdigit(comando[comando.size()-2]))){ string str2 = comando.substr (7,7); numero=atoi(str2.c_str()); }else{ if(isdigit(comando[comando.size()-1])){ string str2 = comando.substr (7,7); numero=atoi(str2.c_str()); if(vetor[numero]=='R'){ ++p; vetor[i]='R'; }else{ if(vetor[numero]=='L'){ --p; vetor[i]='L'; } } } } } } } cout<<p<<endl; p=0; numero=0; } return 0; }
-
rtashiro0 respondido 9 years ago
Verdade...Nem tinha imaginado isso. Obrigado, agora tenho tudo para resolver o problema.
-
jaafilho respondido 9 years ago
filipetrm, não sei se é isso, mas o algoritmo atoi deu erro em outra questão minha, só que deu compilation error. Por que é uma função que parece que só funciona no windows, não funciona no Linux.
-
jaafilho respondido 9 years ago
Meu problema era que eu tava usando o fflush(stdin) ao invés de um simples getchar() para limpar a sujeira do buff.
-
ftrmendonca respondido 9 years ago
Alguem pode me ajudar aqui? Tá dando 100% WA e eu não vejo o erro! ¬¬ OBG!
#include <iostream> #include <cstdio> #include <cstdlib> #include <string> #include <map> using namespace std; int main() { int casos, n, indice, pos = 0; string tmp; map<int, int> mapa; cin >> casos; fflush(stdin); for (int x = 0; x < casos; x++) { cin >> n; pos = 0; indice = 1; for (int a = 0; a < n; a++) { fflush(stdin); getline(cin, tmp); if (tmp == "LEFT") { mapa[indice] = -1; pos--; } else if (tmp == "RIGHT") { mapa[indice] = 1; pos++; } else { int m = atoi(tmp.erase(0, 8).c_str()); pos+= mapa[m]; mapa[indice] = mapa[m]; } indice++; } cout << pos << endl; } return 0; }
-
jaafilho respondido 9 years ago
Mas não se recebe a instrução desse jeito nessa questão. Instrução no estilo "DE" eu vi no problema 1437. Esse só recebe o número de casos de testes, número de instruções e cada instrução só vem como "LEFT", "RIGHT" e "SAME AS i". Sendo i um número variante de 1 a 99 (pois só pode existir no máximo 100 instruções e i não pode se referir a ele mesmo pois geraria um loop).
-
thalyson004 respondido 9 years ago
Sua leitura da entrada está incorreta, dê uma olhada melhor, ou teste para:
3 3 2 *** *N* *** DE 3 3 2 *** *N* *** DE 3 3 2 *** *N* *** DE 3 3 2 *** *N* *** DE 3 3 2 *** *N* *** DE 3 3 2 *** *N* *** DE 0 0 0
-
jaafilho respondido 9 years ago
Meu código tá dando 80% WA, mas no teste de 73 instruções acima deu correto:
RESOLVIDO!
-
MiguelAraujo respondido 9 years ago
a5538931, se possível, coloca as tags code pra facilitar a visualização. Abraços,
-
gmbarbosa respondido 9 years ago
Alguém pode me dizer porque está dando Possible runtime error?
Executei alguns teste, e o código está de acordo com que é solicitado.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Scanner; public class Main{ public static void main(String[] args) throws IOException { Scanner tec = new Scanner(System.in); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String digitos = "SAME AS "; int p; int t = tec.nextInt(); if (t <= 100) { while (t > 0) { int c = tec.nextInt(); if (c >= 1 && c <= 100) { int[] vet = new int[c]; p = 0; for (int x = 0; x < vet.length; x++) { String comando = br.readLine(); if (comando.equalsIgnoreCase("LEFT")) { vet[x] = -1; p = p - 1; }else if (comando.equalsIgnoreCase("RIGHT")) { vet[x] = 1; p = p + 1; }else if(digitos .equalsIgnoreCase(comando.substring(0,8))){ int u = Integer.parseInt(comando.substring(8)); if(u > c){ break; }else{ if(vet[u -1] == -1){ vet[x] = vet[u -1]; p =p -1; }else { vet[x] = vet[u -1]; p =p+ 1; } } } } System.out.println(p+"\n"); } t--; } } } }
Desde já agradeço e qualquer ajuda é bem vinda!
-
rbravo respondido 9 years ago
Estou recebendo Runtime Error, alguem tem ideia do motivo?
Já descobri, estava usando o tamanho errado para o vetor do histórico de ações. =P
-
khenrique0 respondido 9 years ago
Está dando Wrong answer (90%)... Testei todas as entradas e deu certo... Alguem poderia me informar o erro?
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int i=0,vet[100],x=0,j=0,y=0,t=0,cont=0,numb=0,numb2=0; char comando[30]; scanf("%i",&t); for(i=0;i<t;i++) { scanf("%i",&x); y=0; for(j=0;j<x;j++) { gets(comando); if(strcmp(comando,"LEFT")==0) { y--; vet[j] = 0; } else if(strcmp(comando,"RIGHT")==0) { y++; vet[j]= 1; } else { cont = strlen(comando); if(cont==9){ numb = comando[8]-48 ; } else{ numb = comando[8]-48 ; numb2 = comando[9]-48 ; numb = numb*10 + numb2; } if(vet[numb-1]==1) { y++; vet[j]= 1; } else { y--; vet[j]= 0; } } } printf("%i\n",y); y=0; } return 0; }