Код:
#include "stdio.h"
struct atl{long int m;long int s;};
void gsort(struct atl a[], long int left, long int right)
{
long int i,last;
void swap(struct atl a[], long int i, long int j);
if(left<right) {
swap(a, left, (left+right)/2);
last=left;
for(i=left+1; i<=right; i++)
if(a[i].s<a[left].s)
swap(a, ++last,i);
swap(a,left,last);
gsort(a,left,last-1);
gsort(a,last+1,right);}
}
void swap(struct atl a[], long int i, long int j)
{
struct atl temp;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
int main()
{
long int n,i,k,num,uk;
struct atl temp;
long long int sum;
struct atl a[100000];
scanf("%d",&n);
for(i=0;i<n;i++) {scanf("%d %d",&a[i].m,&a[i].s);}
gsort(a,0,n-1);
num=-1; uk=-1; sum=0;
while(uk<n)
{
uk++;
if(a[uk].s>=sum)
{
sum=sum+a[uk].m; num++;
}
}
num++;
printf("%d",num);
return 0;
}
http://www.acm.mipt.ru/judge/problems.p ... roblem=004Вот задача. Вышеприведенный код на 9 тесте выдает ошибку (там стоит компилятор GNU C++) "Wrong answer".
Замена же быстрой сортировки на стандартную сортировку пузырьком:
Код:
for(i=2;i<n+1;i++)
for(k=0;k<=n-i;k++)
if(a[k].s>a[k+1].s)
{
temp=a[k]; a[k]=a[k+1]; a[k+1]=temp;
}
дает ошибку лишь на 17 тесте "Time limit", которая и вынудила меня писать быструю сортировку. Спасибо.
-- Ср ноя 10, 2010 23:45:34 --Проблема в том, что я не знаю тест, на котором программа не работает. Сам я тоже проверил её на нескольких небольших тестах:вроде всё правильно. И еще раз повторю, что при замене быстрой сортировки на сортировку пузырьком этот тест проходится. Значит проблема именно в сортировке. И я не могу понять, почему она может какой-то массив отсортировать неправильно.