Форум программистов, компьютерный форум CyberForum.ru

Так, норм задачка, гляньте, скажите что да как - C++

Восстановить пароль Регистрация
 
yutr777
 Аватар для yutr777
4 / 4 / 0
Регистрация: 07.04.2013
Сообщений: 85
13.04.2013, 00:40     Так, норм задачка, гляньте, скажите что да как #1
Как-то раз Поликарп захотел узнать, кто из секретарей разговаривает по Spyke, а кто — нет. Он выписал для каждого секретаря номер сессии его разговора, или 0, если этот секретарь сейчас не разговаривает по Spyke.

Помогите Поликарпу по этим данным определить, сколько пар секретарей сейчас ведут разговор. Если в данные Поликарпа закралась ошибка, и описанная ситуация никак не могла произойти, требуется сообщить об этом.

Обратите внимание, секретари могут разговаривать по Spyke не только друг с другом — возможны разговоры с внешними собеседниками. Также не разрешены конференции Spyke — то есть в каждом разговоре должны участвовать ровно два собеседника.

Входные данные
В первой строке записано целое число n (1 ≤ n ≤ 103) — количество секретарей в корпорации Поликарпа. В следующей строке записаны n целых чисел через пробел: id1, id2, ..., idn (0 ≤ idi ≤ 109). Число idi равно номеру сессии разговора секретаря номер i, если он разговаривает в данный момент по Spyke, или равно нулю, в противном случае.

Считайте, что секретари пронумерованы от 1 до n некоторым образом.

Выходные данные
Выведите единственное целое число — количество пар секретарей, которые ведут разговор, или -1, если в данные Поликарпа закралась ошибка, и описанная ситуация никак не могла произойти.

Примеры тестов
входные данные
6
0 1 7 1 7 10
выходные данные
2
входные данные
3
1 1 1
выходные данные
-1
входные данные
1
0
выходные данные
0
Примечание
В первом тестовом примере есть два телефонных разговора между секретарями: секретарь номер 2 и секретарь номер 4, секретарь номер 3 и секретарь номер 5.

Во втором тестовом примере описанная ситуация невозможна, так как не разрешены конференции.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <algorithm>
 
typedef long long ll;
 
using namespace std;
 
int main()
{
ll ans=0,n,dl=1,x;
cin >> n;
ll a[10000]={0};
for (int i=0;i<n;i++)
{
    cin >> a[i];
}
sort(a,a+n);
for (int i=1;i<n;i++)
{
    if (a[i]==a[i-1]){dl++;continue;}
    if (a[i]!=a[i-1]){
                      if (dl==2 && a[i-1]!=0){ans++;}
                      if (dl>2 && a[i-1]!=0) {ans=-1;break;} 
                      dl=1;
                      }
}
if (dl==2 && a[n-1]!=0){ans++;}
if (dl>2) {ans=-1;} 
cout << ans;   
return 0;
}
не пашет((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.04.2013, 00:40     Так, норм задачка, гляньте, скажите что да как
Посмотрите здесь:

C++ Скажите пожалуйста как сделать теперь что бы треугольник который справа зарисовваный, оказался только слева зарисованным
скажите что нет так C++
Скажите, что не так делаю! C++
C++ скажите что значат %.2f, 4,8 что значат эти цифры и как оно выведет на экран
C++ Народ гляньте код и подскажите что не так.
C++ Как сделать так что я мог умножать не на два числа а на 3,4,5 и так далее?
код с++. где что поставить что бы прога норм работала? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
adm_loro
Заблокирован
13.04.2013, 02:35     Так, норм задачка, гляньте, скажите что да как #2
так сказать в почти в лоб
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
#include <map>
 
using namespace std;
 
struct cmp 
{
    int cnt;
    cmp():cnt(0){}
    bool operator()(pair<int, int> p) 
    {
        return p.second == 2;
    }
};
 
int main()
{
    int n;
    cin>>n;
    map<int, int> m;
    for(int i = 0; i < n; ++i)
    {
        int t;
        cin >> t;
        --t;
        if(t < 0) continue;
        ++m[t];
        if(m[t] > 2)
        {
            cout << -1 << std::endl;
            system("pause");
            return 0;
        }
    }
    int r = count_if(m.begin(), m.end(), cmp());
    cout <<  r << std::endl;
    system("pause");
    return 0;
}
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
13.04.2013, 02:47     Так, норм задачка, гляньте, скажите что да как #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <map>
 
using namespace std;
 
int main()
{
    setlocale(LC_CTYPE, "");
    cout << "Секретарей: ";
    unsigned secretaryCount;
    cin >> secretaryCount;
 
    map<unsigned, unsigned> skypeCalls;
 
    unsigned callerID;
    for (size_t i = 0; i!=secretaryCount; i++) {
        cout << "Секретарь №" << i + 1 << ": ";
        cin >> callerID;
        skypeCalls[callerID]++;
    }
 
    unsigned pairsCount(0);
 
    for (map<unsigned, unsigned>::const_iterator it=skypeCalls.begin(); it!=skypeCalls.end(); it++) {
        if (it->second > 2 && it->first) {
            cout << -1;
            return -1;
        } else if (it->second == 2) {
        ++pairsCount;
        }
    }
    cout << pairsCount;
    return 0;
}
adm_loro
Заблокирован
13.04.2013, 02:54     Так, норм задачка, гляньте, скажите что да как #4
[quote=Olivеr;4405714]cout << "Секретарь №" << i + 1 << ":" << endl;[/quote

см. что требуется вывести
Цитата Сообщение от yutr777 Посмотреть сообщение
Выведите единственное целое число
Добавлено через 1 минуту
ты еще гуй прикрути

Добавлено через 3 минуты
вот скажи, чем принципиально отличается твое решение от моего? это я к тому, что нахуя?
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
13.04.2013, 02:58     Так, норм задачка, гляньте, скажите что да как #5
От того, что страницы сами не обновляются и нет предупреждения о новых ответах при отправке сообщения.
Я начал писать, когда тут твоего кода еще не было.
adm_loro
Заблокирован
13.04.2013, 03:00     Так, норм задачка, гляньте, скажите что да как #6
Olivеr, прости друг, это я с горяча
salam
157 / 138 / 11
Регистрация: 10.07.2012
Сообщений: 709
13.04.2013, 05:44     Так, норм задачка, гляньте, скажите что да как #7
запрещено выкладывать задачи и идеи решения до окончания соревнования...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2013, 12:57     Так, норм задачка, гляньте, скажите что да как
Еще ссылки по теме:

C++ Ребят, уже запарился, гляньте, что не так!? конструктор копирования и оператор присваивания
скажите пожалуйста что не так? C++
C++ Не работает код, скажите что не так)
C++ Что в коде ни так? while не работает так, как ожидаю
С++ задача, надо зациклить, скажите что не так, ошибку выдает в switch, про точку с запятой знаю их вроде не н C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
yutr777
 Аватар для yutr777
4 / 4 / 0
Регистрация: 07.04.2013
Сообщений: 85
13.04.2013, 12:57  [ТС]     Так, норм задачка, гляньте, скажите что да как #8
Цитата Сообщение от salam Посмотреть сообщение
запрещено выкладывать задачи и идеи решения до окончания соревнования...
я знаю....я сдал сам давно на FPC
Yandex
Объявления
13.04.2013, 12:57     Так, норм задачка, гляньте, скажите что да как
Ответ Создать тему
Опции темы

Текущее время: 11:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru