|
|
back to boardTest #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... ^_^ |
|
|