TEMA

PROBLEM 1574 - URI Fórum 1.0

beecrowd preguntado 9 years ago

URI Online Judge Fórum 1.0

MOD

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.

  • rtashiro0 respondido 9 years ago

    Resolvido

    80% WA, alguém poderia me dizer porque?Obrigado.

  • 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!
  • gmbarbosa respondido 9 years ago

    Valeu pela dica.

  • 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;
    }