ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1021. Таинство суммы

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