Enviado em 03/12/2012 - 01:42h
Olá pessoal, estou tentando resolver um problema em C para o spoj, mas apesar de estar correto aqui(eu acho) la mostra que ta errado, o motivo de eu falar 'eu acho' é que estou começando a cria dúvidas se entendi direito o que o programa deve fazer, já li várias vezes e o que parece ser é:
A descrição acima foi o que eu consegui entender do problema, se alguem quiser ver a o exercicio:
http://br.spoj.pl/problems/MCAIRO/
Criar um programa que determine a rota em que eu posso comprar mais presentes, seguindo algumas regras:
Eu sempre ando em direção ao nordeste(norte e leste), e nunca posso comprar um produto na mao de um comerciante que seja m,ais velho que os anteriores.
eu leio o numero de barracas e a posição x e y de cada uma, sendo que o y aumenta para o norte e o x para o leste, o algoritmo que eu fiz calcula quantos produto posso comprar em cada uma das rotas a partir de cada um das barracas, assim a que tiver o melhor número de presentes é a melhor rota, então está aqui o algoritmo:
A descrição acima foi o que eu consegui entender do problema, se alguem quiser ver a o exercicio:
http://br.spoj.pl/problems/MCAIRO/
Criar um programa que determine a rota em que eu posso comprar mais presentes, seguindo algumas regras:
Eu sempre ando em direção ao nordeste(norte e leste), e nunca posso comprar um produto na mao de um comerciante que seja m,ais velho que os anteriores.
eu leio o numero de barracas e a posição x e y de cada uma, sendo que o y aumenta para o norte e o x para o leste, o algoritmo que eu fiz calcula quantos produto posso comprar em cada uma das rotas a partir de cada um das barracas, assim a que tiver o melhor número de presentes é a melhor rota, então está aqui o algoritmo:
Já me recomendaram nao criar arrays para a saida, mas é que nesse eu tenho que ler o números de instancias.
#include <stdio.h>
int main()
{
int T, N, xi[1000], yi[1000];
int atx=0, aty=0;
int i, j, k, id;
int np1, np2;
scanf("%d", &T);
int resps[T];
for(i = 0; i < T; i++)
{
scanf("%d", &N);
for(k = 0; k < N; k++)
{
scanf("%d%d", &xi[k], &yi[k]);
}
np2 = 1;
//Calcula em cada uma das rotas, quantos presentes podem ser comprados
//a que tiver o maior numeros de presentes é a melhor
for(j = 0; j < N; j++)
{
id = j;
atx = xi[j];
aty = yi[j];
np1 = 1;
for(k = 0; k < N; k++)
{
if(atx >= xi[k] && aty >= yi[k])
continue;
if(atx <= xi[k] && aty <= yi[k] && id < k)
{
atx = xi[k];
aty = yi[k];
id = k;
np1++;
}
}
if(np1 >= np2)
np2 = np1;
}
resps[i] = np2;
}
for(i = 0; i < T; i++)
printf("%d", resps[i]);
return 0;
}