|  | 
|  | 
| вернуться в форум | Test #3 Что такое тест № 3? мой алгоритм не прошел этот тест!!! Вообще где найти разъяснения к номерам тестов??Re: Test #3 какие-такие разъяснения?раз не прошел 3 тест значит где-то у тебя косяк.
Re: Test #3 Никакой не косяк. Реально тест №3 неправильный.Вот корректное решение: считываем в два массива А и В. Потом цикл по элементам А, и для каждого А(и) пытаемся найти такое В(ж), чтобы  А(и)+В(ж)==10000. И получаем ВА. Бред.
 (поиск бинарный так как отсортированы массивы).
 
 #include <iostream>
 
 using namespace std;
 
 int cmp(const void*A,const void *B){
 long t=*(long*)A-*(long*)B;
 if (t>0) return 1;
 if (t==0) return 0;
 if (t<0) return -1;
 }
 
 int main(void){
 long N,M,i,j;
 long *A,*B;
 long * C;
 cin>>N;
 A=new long[N];
 for(i=0;i<N;i++)
 cin>>A[i];
 cin>>M;
 B=new long[M];
 for(i=0;i<M;i++)
 cin>>B[i];
 bool t=false;
 for(i=0;i<N;i++)
 {
 j=10000-A[i];
 C=(long*)bsearch(&j,B,M,sizeof(long),cmp);
 if(C!=NULL)
 if(A[i]+*C==10000){t=true; break;}
 }
 if(t)cout<<"YES";
 else cout<<"NO";
 cout<<endl;
 system("pause");
 return 0;
 }
 
 
 Очевидно условия некорректны. В условии сказано,что массивы упорядочены. Но достаточно дописать в мое решение
 qsort(A,N,sizeof(long),cmp);
 qsort(B,M,sizeof(long),cmp);
 И вуаля все просто, и получаем АС.
 
 Авторы проверяйте условия, или хотя бы читайте форум иногда.
 Тут нередко попадаются задачи с корявыми тестами, которых не должно быть по условию.
 
 Edited by author 03.12.2010 03:00
Re: Test #3 Процедура bsearch предполагает, что массив должен быть отсортирован в неубывающем порядке, мне не совсем понятен твой компоратор, фактически он ничего не меняет, так процедура bsearch и сравнивает по умолчанию. То есть когда ты отсортировал массив по своему компоратору, ты, фактически, инверитровал его и привел к такому виду, что процедура bsearch будет работать правильно.Попробуй на своей первоначальной программе:
 
 9
 3
 5
 15
 20
 100
 900
 5000
 9983
 15000
 9
 7000
 549
 58
 17
 8
 4
 0
 -10
 -30
 Правильный ответ:
 ΥΕS (9983+17)
 
 И да:"Если вы не можете решить задачу, значит вы не можете её решить".
Re: Test #3 попробовал на своей программе#include <iostream>
 using namespace std;
 
 int main()
 {
 int n;
 cin >> n;
 int *a = new int[n*2];
 for (int i = 0; i < n*2; i++) cin >> a[i];
 for (int i = 0; i <n; i++)
 for (int j = n; j < n*2; j++)
 if (a[i]+a[j] == 10000)
 {
 cout << "YES" << endl;
 delete [] a;
 exit (0);
 }
 cout << "NO" << endl;
 delete [] a;
 return 0;
 }
 
 Выдало YES, к тому же такой алгоритм хоть и можно назвать затратным, но он рабочий.
Re: Test #3 Thanks a lot...^_^
 | 
 | 
|