Ir ao conteúdo
  • Cadastre-se

Usuário 25

Membro Pleno
  • Posts

    25
  • Cadastrado em

  • Última visita

posts postados por Usuário 25

  1. @devair1010 OI tudo bem, esse exercício e da OBI,

    Esse e o link: https://olimpiada.ic.unicamp.br/pratique/p2/2017/f3/codigo/

    tentei fazer porém não funcionou:

    #include <stdio.h>
    #include <stdlib.h>
    #include<conio.h>
    #include <string.h> 
    
    #define MAX 10
    char buf;
    int N;
    char prefixo[MAX+1],sufixo[MAX+1];
    
    int main(int argc, char *argv[]) {
    	int N;
    	int i, k;
    	char pref, suf;
    	
    	scanf("%d", &N);
        for ( i = 0; i < N; i++ ){
        scanf("%s", &buf);
    
        for ( k = MAX; k > 0; k-- ){
          if ( sufixo[k] > 0 ){
    	if ( k == MAX ){
        printf("%s",&buf );
    	  return 0;
    	} else {
    	  if ( prefixo[MAX-k] > 0 ){
    	    printf("%s",&buf );
    	    return 0;
    	  }
    	}
          }
        }
        for ( k = MAX; k >= 0; k-- ){
          if ( k < MAX && k > 0 ){
    	prefixo[k];
          }
          if ( k < MAX ){
    	sufixo[MAX-k];
          }
        }
        
      }
      
    printf( "ok" );
          
    
    
    	return 0;
    }

      

  2. Preciso fazer esse código em C. Alguém poderia me ajudar.

     

    A professora Maryam está tentando construir um código constituído de uma sequência de N cadeias de 10 letras minúsculas, S1,S2,S3,…,SN. Essas cadeias da sequência serão, no futuro, concatenadas de diversas maneiras para formar cadeias maiores. Mas, para que o código seja válido, a sequência de cadeias tem que satifazer uma propriedade bastante específica: nenhuma cadeia da sequência pode ser subcadeia de uma concatenação de duas cadeias anteriores na sequência. De forma mais rigorosa, o código será inválido se existirem três inteiros a, b e k, tais que:

    1 ≤ a < k ≤ N, 1 ≤ b < k ≤ N (a pode ser igual a b); e

    Sk é subcadeia da concatenação SaSb.

    Por exemplo, o código S={aaaaaaabbb,yyuudiwwkl, kkfidaaooa} é válido. Mas se adicionarmos a cadeia aooaaaaaaa no final da sequência, o código resultante, S‘={aaaaaaabbb,yyuudiwwkl, kkfidaaooa, aooaaaaaaa}, será inválido, pois S‘4 é subcadeia da concatenação S‘3S‘1.

    Dada a sequência de cadeias, seu programa deve determinar se o código é válido, ou não.

    Entrada

    A primeira linha da entrada contém um inteiro N, representando o número de cadeias na sequência. As N linhas seguintes contêm, cada uma, uma cadeia de 10 letras minúsculas, definindo a sequência de cadeias do código.

    Saída

    Seu programa deve imprimir uma linha contendo a cadeia "ok" caso o código seja válido, ou contendo a primeira cadeia na sequência que invalida o código. Quer dizer, contendo Sk onde k é o menor possível tal que Sk seja subcadeia de uma concatenação de duas cadeias anteriores na sequência.

    Restrições

    1 ≤ N ≤ 10000

    Informações sobre a pontuação

    Em um conjunto de casos de teste somando 40 pontos, N ≤ 100

     

    Exemplos

    Entrada

    3

    aaaaaaabbb

    yyuudiwwkl

    kkfidaaooa

    Saída

    ok

     

    Entrada

    4

    aaaaaaabbb

    yyuudiwwkl

    kkfidaaooa

    aooaaaaaaa

    Saída

    aooaaaaaaa

     

    Entrada

    1

    jfjshiddds

    Saída

    ok

     

     

     

    • Amei 1
  3. @Leonardo0308

    Seu programa deve imprimir uma linha contendo a cadeia "ok" caso o código seja válido, ou contendo a primeira cadeia na sequência que invalida o código. Quer dizer, contendo Sk onde k é o menor possível tal que Sk seja subcadeia de uma concatenação de duas cadeias anteriores na sequência.

    Exemplos

    Entrada

    3

    aaaaaaabbb

    yyuudiwwkl

    kkfidaaooa

    Saída

    ok

     

    Entrada

    4

    aaaaaaabbb

    yyuudiwwkl

    kkfidaaooa

    aooaaaaaaa

    Saída

    aooaaaaaaa

     

    Entrada

    1

    jfjshiddds

    Saída

    ok

     

    Porém o meu código só aparace ok para tudo.

    #include <stdio.h>
    #include <stdlib.h>
    #include<conio.h>
    #include <string.h> 
    
    #define MAX 10
    char buf;
    int N;
    char prefixo[MAX+1],sufixo[MAX+1];
    
    int main(int argc, char *argv[]) {
    	int N;
    	int i, k;
    	char pref, suf; 
    	
    	scanf("%d", &N);
        for ( i = 0; i < N; i++ ){
        scanf("%s", &buf);
    
        for ( k = MAX; k > 0; k-- ){
          if ( sufixo[k] > 0 ){
    	if ( k == MAX ){
        printf("%s",&buf );
    	  return 0;
    	} else {
    	  if ( prefixo[MAX-k] > 0 ){
    	    printf("%s",&buf );
    	    return 0;
    	  }
    	}
          }
        }
        for ( k = MAX; k >= 0; k-- ){
          if ( k < MAX && k > 0 ){
    	prefixo[k];
          }
          if ( k < MAX ){
    	sufixo[MAX-k];
          }
        }
        
      }
      
    printf( "ok" );
          
    
    
    	return 0;
    }

    Tentei converter mas não funcionou.

    • Curtir 1
  4. import java.util.*;
    import java.io.*;
    import java.lang.*;
    
    public class codigo_java {
    
        public static int MAX = 10;
        
        public static void main(String[] args) throws IOException {
    	BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    
            int N;
    	String buf;
    
    	ArrayList<HashSet<String>> prefixo = new ArrayList<HashSet<String>>(MAX+1);
    	ArrayList<HashSet<String>> sufixo = new ArrayList<HashSet<String>>(MAX+1);
    
    	for ( int i = 0; i <= MAX; i++ ){
    	    prefixo.add(new HashSet<String>());
    	    sufixo.add(new HashSet<String>());
    	}
    	
            String line = in.readLine();    
            StringTokenizer tokenizer = new StringTokenizer(line," ");
            N = Integer.parseInt(tokenizer.nextToken());
    
    	for ( int i = 0; i < N; i++ ){
    	    line = in.readLine();
    	    tokenizer = new StringTokenizer(line," ");
    	    buf = tokenizer.nextToken();
    
    	    // checa validade
    	    for ( int k = MAX; k > 0; k-- ){
    		String pref = buf.substring(0,k);
    		if ( sufixo.get(k).contains( pref ) ){
    		    if ( k == MAX ){
    			System.out.println( buf );
    			return;
    		    } else {
    			String suf = buf.substring(k,MAX);
    			if ( prefixo.get(MAX-k).contains( suf ) ){
    			    System.out.println( buf );
    			    return;
    			}
    		    }
    		}
    	    }
    
    	    // inclui palavra (prefixos e sufixos)
    	    for ( int k = MAX; k >= 0; k-- ){
    		if ( k < MAX && k > 0 ){
    		    String pref = buf.substring(0,k);
    		    prefixo.get(k).add( pref );
    		}
    		if ( k < MAX ){
    		    String suf = buf.substring(k,MAX);
    		    sufixo.get(MAX-k).add( suf );
    		}
    	    }
    	    
    	}
    
    	System.out.println( "ok" );
        }
    }

     

    • Amei 1
  5. Oi preciso de ajuda!!!!

    
    #include <iostream>
    #include <string>
    #include <set>
    
    #define MAX 10
    
    using namespace std;
    
    set<string> prefixo[MAX+1],sufixo[MAX+1];
    int N;
    string buf;
    
    int main(){
    
      cin >> N;
      for ( int i = 0; i < N; i++ ){
        cin >> buf;
    
        // checa validade
        for ( int k = MAX; k > 0; k-- ){
          string pref (buf,0,k);
          if ( sufixo[k].count( pref ) > 0 ){
    	if ( k == MAX ){
    	  cout << buf << endl;
    	  return 0;
    	} else {
    	  string suf (buf,k,MAX-k);
    	  if ( prefixo[MAX-k].count( suf ) > 0 ){
    	    cout << buf << endl;
    	    return 0;
    	  }
    	}
          }
        }
    
        // inclui palavra (prefixos e sufixos)
        for ( int k = MAX; k >= 0; k-- ){
          if ( k < MAX && k > 0 ){
    	string pref (buf,0,k);
    	prefixo[k].insert(pref);
          }
          if ( k < MAX ){
    	string suf (buf,k,MAX-k);
    	sufixo[MAX-k].insert(suf);
          }
        }
        
      }
    
      cout << "ok" << endl;
    
      return 0;
    }

     

    • Curtir 1
  6. #include <stdio.h>
    #include <algorithm>
    #include <vector>
    using namespace std;
    
    vector<int> graph[112345], tab[112345], nexta[112345];
    
    int pd(int a, int i)
    {
    	if(i >= graph[a].size())	return 1;
    	if(tab[a][i])	return tab[a][i];
    	return tab[a][i] = max(pd(graph[a][i], nexta[a][i]) + 1, pd(a, i+1));
    }
    
    int
    main(void)
    {
    	int n, m, a, b;
    	scanf("%d %d", &n, &m);
    	for(int i = 0; i < m; i++)
    	{
    		scanf("%d %d", &a, &b);
    		graph[a].push_back(b);
    		tab[a].push_back(0);
    		graph[b].push_back(a);
    		tab[b].push_back(0);
    	}
    	for(int i = 1; i <= n; i++)
    		sort(graph[i].begin(), graph[i].end());
    	for(int i = 1; i <= n; i++)
    		for(int j = 0; j < graph[i].size(); j++)
    			nexta[i].push_back(upper_bound(graph[graph[i][j]].begin(), graph[graph[i][j]].end(), i) - graph[graph[i][j]].begin());
    
    	printf("%d", pd(1, 0));
    	for(int i = 2; i <= n; i++)
    		printf(" %d", pd(i, 0));
    	printf("\n");
    }

    Olá pessoal tudo bem, preciso converter esse código C++ para C, Será que alguém poderia me ajudar.

    • Curtir 1
  7. Olá pessoal, estou fazendo um trabalho, preciso converter C++ para C alguém poderia me ajudar?

     

    Ciclovias

    A cidade de Nlogônia é mundialmente conhecida pelas suas iniciativas de preservação ambiental. Dentre elas, uma das que mais chama atenção é a existência de ciclovias em todas as ruas da cidade. Essa medida teve um sucesso tão grande, que agora a maioria dos moradores usa a bicicleta diariamente. Em Nlogônia, as interseções são numeradas de 1 até N. Cada rua liga duas interseções A e B e possui uma ciclovia entre A e B. Um caminho P de tamanho K é definido como uma sequência de interseções P1, P2, ...\ , PK, tal que para todo i, 1 ≤ i < K, existe uma ciclovia entre Pi e P_i+1. Arnaldo e Bernardo estavam passeando de bicileta pelas ruas de Nlognônia quando pensaram em um novo jogo. Nesse jogo, os dois partem de alguma interseção C e procuram o caminho P de maior tamanho que satisfaça a seguinte regra: as subsequências P1, P3, P5, \ldots , P2x + 1 \quad \quad P2, P4, P6, \ldots, P2x da sequência P devem ser ambascrescentes. Ganha o jogo aquele que encontrar o maior caminho. Bernardo te ligou pedindo ajuda para se preparar para o jogo. Com o mapa da cidade você deve encontrar o tamanho do maior caminho possível para todas as interseções iniciais possíveis, seguindo as restrições acima. No exemplo abaixo, o maior caminho possível para início na interseção 1 é P = (1, 3, 5, 4, 7) e para início na interseção 5 é P = (5, 3, 6) ou P = (5,4,7).

    Entrada

    A primeira linha contém dois inteiros N e M, representando respectivamente o número de interseções e o número de ruas. As M linhas seguintes contém dois inteiros A e B indicando que existe uma ciclovia entre A a B.

    Saída

    Seu programa deve produzir uma única linha, contendo N inteiros R1, R2, ... \ RN, onde Ri é o tamanho do maior caminho possível se o jogo começar na interseção i.

    Restrições

    1 ≤ N ≤ 105.

    0 ≤ M ≤ \dfracN(N-1)2.

    0 ≤ M ≤ 5 \times 105.

    A ≠ B.

    1 ≤ A, B ≤ N.

    Não existem duas ciclovias iguais.

    Informações sobre a pontuação

    Em um conjunto de casos de teste equivalente a 20 pontos, N ≤ 7.

    Em um conjunto de casos de teste equivalente a 40 pontos, N ≤ 100.

    Em um conjunto de casos de teste equivalente a 60 pontos, N ≤ 1000

     

    Exemplos

     

    Entrada

    5 5 1 5 1 3 1 2 2 5 4 5

    Saída

    4 4 4 2 2

          

    Entrada

    6 6 1 3 2 3 4 2 3 4 3 5 5 4

    Saída

    7 5 6 4 2 1

     

     

    O exercício abaixo é resolução oferecida, entretanto ela está em C++, eu preciso responder e C.

    #include <stdio.h>
    #include <algorithm>
    #include <vector>
    using namespace std;
    
    vector<int> graph[112345], tab[112345], nexta[112345];
    
    int pd(int a, int i)
    {
    	if(i >= graph[a].size())	return 1;
    	if(tab[a][i])	return tab[a][i];
    	return tab[a][i] = max(pd(graph[a][i], nexta[a][i]) + 1, pd(a, i+1));
    }
    
    int
    main(void)
    {
    	int n, m, a, b;
    	scanf("%d %d", &n, &m);
    	for(int i = 0; i < m; i++)
    	{
    		scanf("%d %d", &a, &b);
    		graph[a].push_back(b);
    		tab[a].push_back(0);
    		graph[b].push_back(a);
    		tab[b].push_back(0);
    	}
    	for(int i = 1; i <= n; i++)
    		sort(graph[i].begin(), graph[i].end());
    	for(int i = 1; i <= n; i++)
    		for(int j = 0; j < graph[i].size(); j++)
    			nexta[i].push_back(upper_bound(graph[graph[i][j]].begin(), graph[graph[i][j]].end(), i) - graph[graph[i][j]].begin());
    
    	printf("%d", pd(1, 0));
    	for(int i = 2; i <= n; i++)
    		printf(" %d", pd(i, 0));
    	printf("\n");
    }

     

  8. 1 hora atrás, devair1010 disse:

    @Usuário 25    esse código contém erros , e nem em c++ está funcionando , então poste o enunciado desse exercício para sabermos qual o objetivo desse código . 

    Oi obrigado pela ajuda amigo, o código acima é a resolução oferecida pelo site... que está C++, preciso converter para C, acabei de postar o enunciado da pergunta.

    • Obrigado 1
  9. #include <bits / stdc ++. h>
    usando namespace std;
    
    const int N = 100001;
    int n, m;
    
    vetor <int> adj [N], vis [N];
    
    int calc (int p, int q)
    {
    	return lower_bound (adj [p] .begin (), adj [p] .end (), q + 1) -adj [p] .begin ();
    }
    
    int dfs (int p, int a)
    {
    	if (a == vis [p] .size ()) retorna 0;
    	int & res = vis [p] [a];
    	if (res) retorna res;
    	return res = max (dfs (adj [p] [a], calc (adj [p] [a], p)) + 1, dfs (p, a + 1));
    }
    
    int main ()
    {
    	ios :: sync_with_stdio (0);
    	cin >> n >> m;
    	para (int i = 0; i <m; ++ i)
    	{
    		int a, b;
    		cin >> a >> b;
    		adj [a] .push_back (b);
    		vis [a] .push_back (0);
    		adj [b] .push_back (a);
    		vis [b] .push_back (0);
    	}
    	para (int i = 1; i <= n; ++ i)
    		sort (adj [i] .begin (), adj [i] .end ());
    	para (int i = 1; i <= n; ++ i) 
    		cout << (i == 1? "": "") << 1 + dfs (i, 0);
    	cout << endl;
    }

    Olá pessoal, estou fazendo um trabalho na faculdade, preciso converter C++ para C alguém poderia me ajudar?

     

    Ciclovias

    A cidade de Nlogônia é mundialmente conhecida pelas suas iniciativas de preservação ambiental. Dentre elas, uma das que mais chama atenção é a existência de ciclovias em todas as ruas da cidade. Essa medida teve um sucesso tão grande, que agora a maioria dos moradores usa a bicicleta diariamente. Em Nlogônia, as interseções são numeradas de 1 até N. Cada rua liga duas interseções A e B e possui uma ciclovia entre A e B. Um caminho P de tamanho K é definido como uma sequência de interseções P1, P2, ...\ , PK, tal que para todo i, 1 ≤ i < K, existe uma ciclovia entre Pi e P_i+1. Arnaldo e Bernardo estavam passeando de bicileta pelas ruas de Nlognônia quando pensaram em um novo jogo. Nesse jogo, os dois partem de alguma interseção C e procuram o caminho P de maior tamanho que satisfaça a seguinte regra: as subsequências P1, P3, P5, \ldots , P2x + 1 \quad \quad P2, P4, P6, \ldots, P2x da sequência P devem ser ambascrescentes. Ganha o jogo aquele que encontrar o maior caminho. Bernardo te ligou pedindo ajuda para se preparar para o jogo. Com o mapa da cidade você deve encontrar o tamanho do maior caminho possível para todas as interseções iniciais possíveis, seguindo as restrições acima. No exemplo abaixo, o maior caminho possível para início na interseção 1 é P = (1, 3, 5, 4, 7) e para início na interseção 5 é P = (5, 3, 6) ou P = (5,4,7).

    Entrada

    A primeira linha contém dois inteiros N e M, representando respectivamente o número de interseções e o número de ruas. As M linhas seguintes contém dois inteiros A e B indicando que existe uma ciclovia entre A a B.

    Saída

    Seu programa deve produzir uma única linha, contendo N inteiros R1, R2, ... \ RN, onde Ri é o tamanho do maior caminho possível se o jogo começar na interseção i.

    Restrições

    1 ≤ N ≤ 105.

    0 ≤ M ≤ \dfracN(N-1)2.

    0 ≤ M ≤ 5 \times 105.

    A ≠ B.

    1 ≤ A, B ≤ N.

    Não existem duas ciclovias iguais.

    Informações sobre a pontuação

    Em um conjunto de casos de teste equivalente a 20 pontos, N ≤ 7.

    Em um conjunto de casos de teste equivalente a 40 pontos, N ≤ 100.

    Em um conjunto de casos de teste equivalente a 60 pontos, N ≤ 1000

     

    Exemplos

     

    Entrada

    5 5 1 5 1 3 1 2 2 5 4 5

    Saída

    4 4 4 2 2

          

    Entrada

    6 6 1 3 2 3 4 2 3 4 3 5 5 4

    Saída

    7 5 6 4 2 1

     

            

    • Curtir 1

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!