914 - Jumping Champion
Posted: Mon Oct 30, 2006 10:58 am
I got WA at problem 914(Jumping Champion).
But I can't find the bugs... I'm so sad now...
Would you mind giving some test input and output? Or plzzzzz notify me my fault...
-----------------------------------------------------------------------------------
#include <stdio.h>
#include <math.h>
struct jump_info{
int jump_dst;
int jump_occur;
}jump[80000];
int primes[80000];
int jump_list[80000];
int is_prime(int n){
int i, sqrt_n;
if(n<2 || (n>2 && n%2==0)) return 0;
sqrt_n = (int)sqrt(n);
for(i=3; i<=sqrt_n; i+=2)
if(n % i == 0) return 0;
return 1;
}
int main(void){
int i, j, k, case_qty, prime_qty=0, jump_qty, start, end, start_index, end_index;
int is_champ, tmp;
primes[prime_qty++] = 2;
for(i=3; i<=1000000; i+=2)
if(is_prime(i)) primes[prime_qty++] = i;
for(i=0; i<prime_qty-1; i++)
jump_list = primes[i+1] - primes;
scanf("%d", &case_qty);
for(i=0; i<case_qty; i++){
scanf("%d %d", &start, &end);
for(j=0; j<prime_qty; j++){
if(primes[j] >= start){
start_index = j;
j++;
break;
}
}
for( ; j<prime_qty; j++){
if(primes[j] > end){
end_index = j-1;
break;
}
}
is_champ = 1;
jump_qty = 0;
for(j=start_index; j<end_index; j++){
for(k=0; k<jump_qty; k++){
if(jump[k].jump_dst == jump_list[j]){
jump[k].jump_occur++;
break;
}
}
if(k==jump_qty){
jump[jump_qty].jump_dst = jump_list[j];
jump[jump_qty++].jump_occur = 1;
}
}
for(j=jump_qty-1; j>=1; j--){
if(jump[j].jump_occur > jump[j-1].jump_occur){
tmp = jump[j].jump_occur;
jump[j].jump_occur = jump[j-1].jump_occur;
jump[j-1].jump_occur = tmp;
tmp = jump[j].jump_dst;
jump[j].jump_dst = jump[j-1].jump_dst;
jump[j-1].jump_dst = tmp;
}
else if(jump[j].jump_occur == jump[j-1].jump_occur){
is_champ = 0;
break;
}
}
if(is_champ && jump_qty>0)
printf("The jumping champion is %d\n", jump[0].jump_dst);
else
printf("No jumping champion\n");
}
return 0;
}
But I can't find the bugs... I'm so sad now...
Would you mind giving some test input and output? Or plzzzzz notify me my fault...
-----------------------------------------------------------------------------------
#include <stdio.h>
#include <math.h>
struct jump_info{
int jump_dst;
int jump_occur;
}jump[80000];
int primes[80000];
int jump_list[80000];
int is_prime(int n){
int i, sqrt_n;
if(n<2 || (n>2 && n%2==0)) return 0;
sqrt_n = (int)sqrt(n);
for(i=3; i<=sqrt_n; i+=2)
if(n % i == 0) return 0;
return 1;
}
int main(void){
int i, j, k, case_qty, prime_qty=0, jump_qty, start, end, start_index, end_index;
int is_champ, tmp;
primes[prime_qty++] = 2;
for(i=3; i<=1000000; i+=2)
if(is_prime(i)) primes[prime_qty++] = i;
for(i=0; i<prime_qty-1; i++)
jump_list = primes[i+1] - primes;
scanf("%d", &case_qty);
for(i=0; i<case_qty; i++){
scanf("%d %d", &start, &end);
for(j=0; j<prime_qty; j++){
if(primes[j] >= start){
start_index = j;
j++;
break;
}
}
for( ; j<prime_qty; j++){
if(primes[j] > end){
end_index = j-1;
break;
}
}
is_champ = 1;
jump_qty = 0;
for(j=start_index; j<end_index; j++){
for(k=0; k<jump_qty; k++){
if(jump[k].jump_dst == jump_list[j]){
jump[k].jump_occur++;
break;
}
}
if(k==jump_qty){
jump[jump_qty].jump_dst = jump_list[j];
jump[jump_qty++].jump_occur = 1;
}
}
for(j=jump_qty-1; j>=1; j--){
if(jump[j].jump_occur > jump[j-1].jump_occur){
tmp = jump[j].jump_occur;
jump[j].jump_occur = jump[j-1].jump_occur;
jump[j-1].jump_occur = tmp;
tmp = jump[j].jump_dst;
jump[j].jump_dst = jump[j-1].jump_dst;
jump[j-1].jump_dst = tmp;
}
else if(jump[j].jump_occur == jump[j-1].jump_occur){
is_champ = 0;
break;
}
}
if(is_champ && jump_qty>0)
printf("The jumping champion is %d\n", jump[0].jump_dst);
else
printf("No jumping champion\n");
}
return 0;
}