TOPIC

PROBLEM 1578 - URI Fórum 1.0

URI Online Judge asked 6 years ago

URI Online Judge Fórum 1.0

MOD

This topic was solved and cannot recieve new replies.

  • leandro.zatesko.alunos replied 5 years ago

    Olá, sou o problem setter deste problema.

    Lendo as principais dúvidas de vocês, dou as seguintes dicas:

    1. Note que toda linha de saída deve ser finalizada com uma quebra de linha. Isto vale não só para este problema, mas para todo problema de Maratona/ICPC/online judges. Esquecer de finalizar uma linha possivelmente fará seu código receber PE.

    2. Note que deve haver uma linha em branco (i.e. uma quebra de linha adicional) entre saídas de casos de teste consecutivos. Se você deixar uma linha em branco após a saída do último caso de teste ou antes do primeiro, receberá PE. Isto ocorre em muitos problemas do UVA e ocorre neste também.

    3. Note que deve haver exatamente uma coluna de espaços em branco entre colunas consecutivas da matriz, além dos espaços necessários para o alinhamento. Se você deixar espaços sobrando no final ou no começo de uma linha, receberá PE.

    4. O erro PE só é reportado quando a diferença entre a saída esperada e a saída impressa só se dá na quantia de caracteres brancos (espaços, quebras de linha, tabulações etc.), o que significa que omitir o caractere ':', por exemplo, vai conduzir a WA, não a PE.

    5. Note que (2^32-1)^2 não cabe em 32 bits. Perceber o tipo apropriado das variávies é uma das habilidades necessárias de um programador.

    Sem mais, Zatesko

  • Thiago Barbosa de Souza replied 5 years ago

    Olá pessoal, estou recebendo Presentation error e não sei onde pode estar o problema. Segue o código:

    #include <bits/stdc++.h>
    using namespace std;
    
    #define rep(i,n) for( i=0;i<n;++i )
    #define MAX 22
    
    int main(){
    
        unsigned long long int m[MAX][MAX], maior[MAX], X, R;
        int N, i, j, T, r[MAX], c=4;
        char A[MAX];
        bool flag, flag2, flag3;
    
        scanf( "%d", &N ); 
        while( N-- ){
    
            if( flag2 ) printf( "\n" );
    
            scanf( "%d", &T ); // tamanho matriz
    
            rep(i,T+1){ maior[i] = 0; }  // setando maior
    
            rep(i,T) { 
                rep(j,T) {
    
                    scanf( "%llu", &X );
                    m[i][j] = X*X;
    
                    if( m[i][j] > maior[j] ){
                        maior[j] = m[i][j];
                    }   
                } 
            }
    
            rep(i,T) {  
                sprintf( A, "%llu", maior[i] );
                r[i] = strlen( A );
            }
    
            printf( "Quadrado da matriz #%d:\n", c++ );
            flag=flag2=flag3=false;
            rep(i,T) { 
    
                if( flag3 ) printf( "\n" ); 
    
                rep(j,T) {
    
                    if( flag ) printf( " " );
                    printf(  "%*llu", r[j], (m[i][j]) ); // * qtd de casas
                    flag = true;
                }
    
                flag3=true; flag = false;
            }
    
            printf( "\n" );
    
            flag2 = true;
        }
    
        return 0;
    }

    Grato pela ajuda.

  • Erick Vieira Santos de Oliveira replied 4 years ago

    Meu código em Python 3 retorna com "Presentation error". Creio que o erro esteja na parte do espaçamento, mas já modifiquei e continuo recebendo o mesmo feedback. Podem avaliar o meu algoritmo para ver onde se encontra o erro?

    # Functions
    
    def fill():
        num = int(input())
        mat = []
    
        for i in range(num):
            arr = []
            order = int(input())
    
            for n in range(order):
                val = input().split()
                arr.append(val)
    
            mat.append(arr)
    
        return mat
    
    def square(mat):
        num = 4
    
        for i in range(len(mat)):
            for n in range(len(mat[i])):
                for k in range(len(mat[i][n])):
                    mat[i][n][k] = str(int(mat[i][n][k]) ** 2)
    
            sp = space(mat[i])
            print("Quadrado da matriz #%d:" % num)
    
            for x in range(len(mat[i])):
                for y in range(len(mat[i][x])):
    
                    if len(mat[i][x][y]) != sp[y]:
                        indent = " " * (sp[y] - int(len(mat[i][x][y])))
                        print("%s%s" % (indent, mat[i][x][y]), end=" ")
                    else:
                        print("%s" % mat[i][x][y], end=" ")
    
                if i == len(mat) - 1 and x == len(mat[i]) - 1:
                    continue
                else:
                    print()
    
            num += 1
    
            print()
    
    def space(mat):
        arr = []
    
        for i in range(len(mat)):
            n = 1
            hv = mat[0][i]
    
            while n < len(mat):
    
                if len(hv) < len(mat[n][i]):
                    hv = mat[n][i]
                    n += 1
                else:
                    n += 1
    
            arr.append(len(hv))
    
        return arr
    
    # Main Program
    
    matrix = fill()
    square(matrix)
  • 🧙The Install Wizard 🧙 replied 4 years ago

    Acredito que so existe quebra de linha ENTRE matrizes.

  • Alexandre Jorge replied 5 years ago

    Está dando W.A (100%) alguém pode me ajudar? Já fiz todos os testes que estão aqui no fórum e dá tudo certo. Assim como diversos teste aleatórios usando o Toolkit também retornaram todos corretos.

    import java.util.Scanner;
    
    public class Main {
    
        public static void main(String[] args) {
    
            int N, M, c, x = 4;
            long[][] matriz;
            long[] maiores;
    
            Scanner s = new Scanner(System.in);
    
            N = s.nextInt();
    
            for(int i = 0; i < N; i++){
    
                M = s.nextInt();
                matriz = new long[M][M];
                maiores = new long[M];
    
                for(int j = 0; j < matriz.length; j++){
                    for(int k = 0; k < matriz[0].length; k++){
    
                        long temp = Long.parseLong(s.next());
                        matriz[j][k] = temp * temp;
    
                        if(k < 0){
                            maiores[k] = matriz[j][k];
                        } else {
                            if(matriz[j][k] > maiores[k]){
                                maiores[k] = matriz[j][k];
                            }
                        }
                    }
                }
    
                System.out.printf("Quadrado da matriz #%d:\n", x);
                for(int j = 0; j < matriz.length; j++){
                    for(int k = 0; k < matriz[0].length; k++){
    
                        c = Long.toString(maiores[k]).length();
    
                        System.out.printf("%"+c+"d", matriz[j][k]);
    
                        if(k < matriz.length - 1){
                            System.out.printf(" ");
                        } else {
                            System.out.printf("\n");
                        }   
                    }   
                }
                System.out.printf("\n");
                x++;
            }       
        }
    }
  • Hades replied 5 years ago

    Caros,

    Fiz o programa e está dando WA (100%). Peguei a saída do toolkit (fiz o download do arquivo) e comparei com minha saída usando diff. ARQUIVOS IDÊNTICOS! Existe algum problema com esse problema?? :)

    Obrigado. Hades.

    Esta é a entrada: 5 2 7 12 1024 1 2 2147483647 3 6 2147483650 5 5555 9999999999 4444 33333 1 3 3 3 3 3 5 5 5 5 5 7 7 7 7 7 88888 8 8 8 888 3 2147483647 2147483646 2147483645 2147483648 2147483649 2147483650 0 0 0 2 66 26 13 11

    Minha saída:

    Quadrado da matriz #4:
         49 144
    1048576   1
    
    Quadrado da matriz #5:
    4611686014132420609                   9
                     36 4611686027017322500
    
    Quadrado da matriz #6:
      30858025 7766279611452241921 19749136 1111088889      1
             9                   9        9          9      9
            25                  25       25         25     25
            49                  49       49         49     49
    7901076544                  64       64         64 788544
    
    Quadrado da matriz #7:
    4611686014132420609 4611686009837453316 4611686005542486025
    4611686018427387904 4611686022722355201 4611686027017322500
                      0                   0                   0
    
    Quadrado da matriz #8:
    4356 676
     169 121

    Saída do toolkit:

    Quadrado da matriz #4:
         49 144
    1048576   1
    
    Quadrado da matriz #5:
    4611686014132420609                   9
                     36 4611686027017322500
    
    Quadrado da matriz #6:
      30858025 7766279611452241921 19749136 1111088889      1
             9                   9        9          9      9
            25                  25       25         25     25
            49                  49       49         49     49
    7901076544                  64       64         64 788544
    
    Quadrado da matriz #7:
    4611686014132420609 4611686009837453316 4611686005542486025
    4611686018427387904 4611686022722355201 4611686027017322500
                      0                   0                   0
    
    Quadrado da matriz #8:
    4356 676
     169 121
  • Marcus Antunius replied 4 years ago

    Alguns casos de Teste minha saída não é como o esperado Estou recebendo PE

    Problema resolvido
  • leandro.zatesko.alunos replied 5 years ago

    Hello, I am the author of this problem.

    Reading the doubts reported in this topic, I list some useful tips:

    1. Notice that each output line must be ended with an end-of-line. This is required not only in this problem, but in every ICPC-like problem. Forgetting this will possibly lead to PE.

    2. Notice that there should always be a blank line (i.e. an additional end-of-line) between outputs of consecutive test cases. If you print a blank line after the output for the last test case or before the output for the first, you will receive PE. This happens in many UVA problems and so happens in this too.

    3. Notice that there must be a column of blankspaces between consecutive columns of the matrix, besides the spaces needed to the alignment. If you print spaces after the end of before the beginning of a line, you will get PE.

    4. PE is reported only when the difference between the expected output and the printed output lies in the amount of blank characters (spaces, ends-of-line, tabbing etc.), which means that ommitting the character ':', for example, will lead to WA, not to PE.

    5. Notice that (2^32-1)^2 does not fit in 32 bits. Realising the appropriate variable type is one of the abilities required from a programmer.

    Nothing further, Zatesko

  • Gustavo Guedes replied 5 years ago

    Gente, eu percebi que quando eu coloco ':' no printf com a mensagem "Quadrado da matriz #x:" ta dando Presentation error e quando eu tiro o ':' da Wrong answer (10%), sim, 10%... eu não encontrei nenhum erro, nem no maior caso e nem no menor caso de teste.... alguém pode me explicar pq ta dando errado?

    #include<stdio.h>
    
    int digitos(unsigned long long x)
    {
        if(x<10)
            return 1;
        return 1+digitos(x/10);
    }
    int main()
    {
        unsigned long long mat[25][25], maior[25];
        int i, j, tam, q=4, n, t;
        scanf("%d", &t);
        while(t--)
        {
            scanf("%d", &n);
            for(i=0; i<n; i++)
                maior[i]=0;
            for(i=0; i<n; i++)
                for(j=0; j<n; j++)
                {
                    scanf("%llu", &mat[i][j]);
                    mat[i][j]*=mat[i][j];
                    if(mat[i][j]>maior[j])
                        maior[j]=mat[i][j];
                }
    
            for(i=0; i<n; i++)
                maior[i]=digitos(maior[i]);
            printf("Quadrado da matriz #%d:\n", q++);
            for(i=0; i<n; i++)
            {
                for(j=0; j<n; j++)
                {
                    tam=digitos(mat[i][j]);
                    while(maior[j]-tam>0)
                    {
                        printf(" ");
                        tam++;
                    }
                    printf("%llu", mat[i][j]);
                    if(j!=n-1)
                        printf(" ");
                }
                printf("\n");
            }
            printf("\n");
        }
    }
  • Lucas Ferreira dos santos FATEC_IPI replied 5 years ago

    Olá pessoas , estou tomando Presentation Error alguem poderia me ajudar ?

    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    #include <iostream>
    #include <iomanip>
    
    using namespace std;
    
    int main (){
         unsigned long long int n,m,x=4,maior = 0;
        char espacos[25];
        cin>>n;
        while(n-- && (n <= 100)){
            cin>>m;
             unsigned long long int mat[m][m];
             unsigned long long int vet [m];
             int tamanho[m] ;
            for (int i = 0 ; i < m ; i++){
                for (int j = 0 ; j < m ; j++){
                    cin>> mat[i][j];
                    mat[i][j]=pow(mat[i][j],2);
                    }
            }
    cout<<"Quadrado da matriz #"<<x<<":"<<endl;
             for (int i = 0 ; i<m;i++){
                for (int j = 0 ; j < m;j++){
                    if (mat[j][i] > maior){
                      vet[i] = maior = mat[j][i];
                    }
    
                }
           sprintf(espacos,"%llu",vet[i]);
               tamanho[i] = strlen(espacos);
               maior = 0;
        }
    
        for(int i=0;i<m;i++){
                for(int j=0;j<m;j++){
                    if (j == m-1)
                    cout <<setw(tamanho[j])<< mat[i][j];
                    else
                        cout <<setw(tamanho[j])<<mat[i][j]<<" ";
                }
                cout << endl;
            }
        x++;
        maior = m = 0;
     cout << endl;
        }
        return 0 ;
    }
  • KumarPadhi replied 5 years ago

    Hi I am not able to get it right I am getting every time a presentation error I have made and tested my code with multiple test cases and checked my code but not able to find what I am doing wrong can any one please please help me my code is:

    """
    program to find square matrix values for Atrapalhilton
    """
    
    def square(val):
        """
        squaring function
        """
        return val ** 2
    
    def sqmat():
        """
        computes Squared values of each element in the matrix
        """
        count = 4
        test = input()
        for i in range(test):
            matdim = input()
            maxsize = [0 for _ in range(matdim)]
            matrix = []
            for _ in range(matdim):
                mat = map(int, raw_input().split())
                assert(len(mat) == matdim)
                mat = map(square, mat)
                pos = 0
                for num in mat:
                    length = len(str(num))
                    if maxsize[pos] < length:
                        maxsize[pos] = length
                    pos += 1
                matrix.append(mat)
            print "Quadrado da matriz #%i:" % count
            start = 0
            for opmat in matrix:
                pos = 0
                for val in opmat:
                    print "{0:>{1}}".format(val, maxsize[pos]),
                    pos += 1
                if start < matdim - 1:
                    print ""
                    start += 1
            print "\n"
            count += 1
    
    if __name__ == '__main__':
        sqmat()
  • Gleider Mackedanz replied 5 years ago

    Olá, ta dando Wrong answer (90%), mas não consigo encontrar o erro, todos os testes deram corretos:

    #include <stdio.h>
    
    int main(){
        int n, m, t, i, j, maior[21], cont=0, maiortemp=0;
        unsigned long long int v[21][21], temp;
    
        scanf("%d", &n);
        t=n;
    
        while(n>0){
            scanf("%d", &m);
    
            for(i=0;i<m;i++){
                for(j=0;j<m;j++){
                    scanf("%lld", &v[i][j]);
                    if(i==0){
    
                        temp = v[0][j]*v[0][j];
                        if(temp==0){
                            cont=1;
                        }
                        else{
                            while(temp>=1){
                                temp/=10;
                                cont++;
    
                            }
                        }
                        maior[j]=cont;
    
                    }
                    else{
                        temp = v[i][j]*v[i][j];
                        if(temp==0){
                            cont=1;
                        }
                        else{
                            while(temp>=1){
                                temp/=10;
                                cont++;
                            }
                        }
                        if(cont>maior[j]){
                            maior[j]=cont;
                        }
                    }
                    cont=0;
    
                }
            }
    
            printf("Quadrado da matriz #%d:\n", t-n+4);
            for(i=0;i<m;i++){
                for(j=0;j<m;j++){
                    temp=v[i][j]*v[i][j];
                    if(temp==0){
                        cont=1;
                    }
                    else{
                        while(temp>=1){
                            temp/=10;
                            cont++;
                        }   
                    }
                    maiortemp=maior[j]-cont;
                    while(maiortemp>0){
                        printf(" ");
                        maiortemp--;
                    }
                    cont=0;
    
                    printf("%lld ", v[i][j]*v[i][j]);
                }
                printf("\n");
    
            }
    
            printf("\n");
            n--;
        }
    
        return 0;
    }

    Desde já agradeço.

  • Regis Sganzerla replied 5 years ago

    WrongAnswer 10%????

    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    int main()
    {
        int i, j, q, cont = 4, N, val;
        cin >> N;
         for(q=1; q<=N; q++)
        {
        cin >> val;
        int mat[val][val];
    
            for (i=0; i < val; i++)
            {
    
                for (j=0; j < val; j++)
                {
                    cin >> mat[i][j];
    
                }
            }
            for (i=0; i < val; i++)
            {
    
                for (j=0; j < val; j++)
                {
                    mat[i][j] = mat[i][j] * mat[i][j];
    
                }
            }
            cout << "Quadrado da matriz #" << cont << ":" << endl;
             for (i=0; i < val; i++)
            {
    
                for (j=0; j < val; j++)
                {
                    cout << mat[i][j] << "\t";
                }
                cout << endl;
            }
        cout << endl;
        cont = cont + 1;
        }
        return 0;
    
    }
  • cavalca replied 5 years ago

    Wrong Answer 10%, nao imagino mais o que possa estar errado

    #include <stdio.h>
    #include <math.h>
    
    int main() {
    
        unsigned long long int m[101][20][20], maior, k[100][20];
        int i, n, j, l, o[20], kk[100][20];
        scanf("%d", &n);
        for(i=0;i<n;i++){
            scanf("%d", &o[i]);
            for(j=0;j<o[i];j++) for(l=0;l<o[i];l++) scanf("%llu", &m[i][j][l]);
        }
        for(i=0;i<n;i++){
            for(l=0;l<o[i];l++){ maior=0;
                for(j=0;j<o[i];j++){
                    m[i][j][l]=m[i][j][l]*m[i][j][l];
                    if(m[i][j][l]>maior) { k[i][l]=log10(m[i][j][l]); maior=m[i][j][l]; }
                }
            for(j=0;j<o[i];j++) kk[i][j]=floor(k[i][j])+1;
    
        }
        }
        for(i=0;i<n;i++){
            printf("Quadrado da matriz #%d:\n", i+4);
            for(j=0;j<o[i];j++){
                for(l=0;l<o[i];l++){
                    printf("%*llu", kk[i][l], m[i][j][l]);
                    if(l!=o[i]-1) printf(" ");
                }
                printf("\n");
                }
            if(i<n-1) printf("\n");
            }
        return 0;
    }
  • Erick Leonardo de Sousa Monteiro replied 5 years ago

    Resolvido!

    Por que tá dando Time limit exceeded?

    MOD
  • Vinícius Lambardozzi Nascimento replied 5 years ago

    Alguma ideia do porque de eu receber 90% W.A.? Já testei várias entradas, e todas as saídas estão corretas. Acredito que seja um problema com a formatação, mas tentei também várias formatações diferentes todas com 90% ou 100% W.A..

    import java.io.*;
    
    public class Main
    {
        public static void main(String[] args) throws IOException
        {
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
    
            int x = 4;
            int n = Integer.parseInt(reader.readLine());
    
            int order;
            long[][] matrix;
            int[] sizes;
    
            String[] spInput;
    
            for(int i = 0; i < n; i++)
            {
                order = Integer.parseInt(reader.readLine());
                matrix = new long[order][order];
                sizes = new int[order];
    
                for(int j = 0; j < order; j++)
                {
                    spInput = reader.readLine().split(" ");
                    for(int k = 0; k < order; k++)
                    {
                        matrix[j][k] = Long.parseLong(spInput[k]);
                        if(k == 0 || String.valueOf(Math.pow(matrix[j][k], 2)).length() - 2 > sizes[k])
                        {
                            sizes[k] = String.valueOf(Math.pow(matrix[j][k], 2)).length() - 2;
                        }
                    }
                }
    
                writer.write(String.format("Quadrado da matriz #%d:", x));
                writer.newLine();
    
                for(int j = 0; j < order; j++)
                {
                    for(int k = 0; k < order; k++)
                    {
                        writer.write(String.format("%" + sizes[k] + "d", (long)Math.pow(matrix[j][k], 2)));
                        if(k != order - 1)
                        {
                            writer.write(" ");
                        }
                    }
                    writer.newLine();
                }
                if(i != n - 1)
                writer.newLine();
                x++;
            }
    
            writer.close();
        }
    }
  • Rafael Kaustchr replied 5 years ago

    Olá pessoal, meu código está dando runtime error, mas funciona normalmente no meu PC. Alguém poderia me dizer onde está o erro?

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main() {
        int casos, m, num;
        unsigned long long int mat[20][20];
        unsigned long long int max[20], tmp;
        int i, j, k;
    
        char mascara_texto[20][6]; //  "%{quant}d" 
        char temp[15];
    
        scanf("%d", &casos);
        k = 4;
        while ( casos ) {
            scanf("%d", &m );
    
            for ( i=0; i < m; i++)
                max[i] = 0;
    
            for ( i = 0; i < m; i++ ) {
                for ( j = 0; j < m; j++ ) {
                    scanf("%d", &num);
                    tmp = num*num;
                    mat[i][j] = tmp;
                    if ( tmp > max[j] )
                        max[j] = tmp;
                }
            }
    
            for ( i=0; i < m; i++ ) {
                sprintf(temp, "%llu", max[i]);
                tmp = strlen(temp);
    
                strcpy(mascara_texto[i], "%");
                sprintf(temp,"%llu",tmp);
                strcat(mascara_texto[i], temp );
                strcat(mascara_texto[i], "d" );
            }
    
            printf("Quadrado da matriz #%d:\n", k);
            for ( i = 0; i < m; i++ ) {
                for ( j = 0; j < m-1; j++ ) {
                    printf(mascara_texto[j], mat[i][j]);
                    printf(" ");
                }
                printf(mascara_texto[j], mat[i][j]);
                printf("\n");
            }
    
            casos--;
            k++;
        }
    
        return 0;
    }
  • wormhole replied 5 years ago

    i dont undrestand whats wrong with the code its work fine but show 100% error can anybody help me?

    include

    int main() { int a, i, j, b, t, ar[20][20]; scanf("%d", &a); for(t=0;t<a;t++) { scanf("%d", &b); printf("Quadrado da matriz #%d:\n", (b*b)); int ar[b][b]; for(i=0;i<b;i++) { for(j=0;j<b;j++) { scanf("%d ", &ar[i][j]); } printf("\n"); }

        printf("     ");
        for(i=0;i<b;i++)
        {
            for(j=0;j<b;j++)
            {
                printf("%d ", (ar[i][j]*ar[i][j]));
            }
            printf("\n");
        }
    }
    return 0;

    }

  • Jemerson Damasio replied 5 years ago

    Aproveitando o ensejo, se alguém tiver algum caso de teste que evidencia o meu Presentation Error ficarei deveras agradecido. Segue meu código (Python):

    Removido após AC

    Edit: O problema é que usei a variável i para controlar o laço de casos e um laço interno. Em Python isso não é uma boa ideia, pois se é variável de mesmo nome ele usará o último valor (do último laço).

  • Jemerson Damasio replied 5 years ago

    Oi, bergolho, você disse:

    Mas a questão já é clara quanto a isso quando afirma:

    Perceba que é apenas entre matrizes. A saída do caso de teste no HTML do problema não é referência exata. Pelo menos nunca confiei nela, apenas no texto. =)

1 of 3