ENG  RUSTimus Online Judge
Online Judge
Problems
Authors
Online contests
About Online Judge
Frequently asked questions
Site news
Webboard
Links
Problem set
Submit solution
Judge status
Guide
Register
Update your info
Authors ranklist
Current contest
Scheduled contests
Past contests
Rules
back to board

Discussion of Problem 1021. Sacrament of the Sum

Test #3
Posted by Elinchik 20 Jul 2010 19:23
Что такое тест № 3? мой алгоритм не прошел этот тест!!! Вообще где найти разъяснения к номерам тестов??
Re: Test #3
Posted by Andrew Shmig aka SKYDOS 20 Jul 2010 19:58
какие-такие разъяснения?
раз не прошел 3 тест значит где-то у тебя косяк.
Re: Test #3
Posted by fsb4000 3 Dec 2010 02:27
Никакой не косяк. Реально тест №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
Posted by Astekinane 19 Sep 2011 15:39
Процедура 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
Posted by BrainFuck [UFU SESC bash.org/I'ja] 25 Apr 2013 18:39
попробовал на своей программе
#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
Posted by Ealham Al Musabbir 22 Jul 2015 23:57
Thanks a lot...
^_^