Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
2 / 0 / 0
Регистрация: 25.10.2013
Сообщений: 43
1

Необходимо определить количество совпадающих марок в альбомах.олимпиадная задача

17.11.2019, 15:31. Показов 292. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
На олимпиаде за эту задачу я получила 0 баллов, подскажите, что не так

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
43
44
45
#include <iostream>
 
using namespace std;
 
int main()
{
    int n = 0;
    int m = 0;
    int a[100000];
    int a1[100000];
    int km[100000];
    int k = 0;
 
    cin >> n;
    cin >> m;
    if (n > 0 && n < 100001 && m > 0 && m < 100001)
        {
        for(int i = 0; i < n; i++)
        { cin >> a[i]; }
        for(int j = 0; j < m; j++) {
            cin >> a1[j];
        }
 
        for (int q = 0; q < n; ++q) {
            for (int w = 0; w < m; ++w) {
                if (a[q] == a1[w]) {
                    km[k] = a1[w];
                    ++k;
                }
            }
        }
        if (k != 0) {
            cout << k << endl;
            for(int p = 0; p < k; ++p) {
                cout << km[p] << " ";
            }
        }
        else {
            cout << k;
        }
        return 0;
    }
    else
        return 1;
}
задача А
ДВА АЛЬБОМА из пдф файла
Вложения
Тип файла: pdf олимпиада_1.pdf (112.5 Кб, 7 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.11.2019, 15:31
Ответы с готовыми решениями:

Определить количество автомобилей одинаковых марок
Сведения об автомабиля состоят из: его марки,цвета, года выпуска, имени и фамили ...

Олимпиадная задача. Максимальное количество различных этикеток.
Вася коллекционирует спичечные этикетки. Для этого у него есть N альбомов вместимостью K1, K2, …,...

Олимпиадная задача - определить стоимость билетов
Имя входного файла: tickets.in Имя выходного файла: tickets.out Ограничение по времени: 2 секунды...

Определить среднее значение максимальной скорости, а также количество и название марок 2 автомобилей
Здравствуйте, помогите пожалуйста написать программу для решения задачи с одномерным массивом,...

2
Мозгоправ
1744 / 1038 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
17.11.2019, 18:27 2
Цитата Сообщение от Ефросиньюшка Посмотреть сообщение
что не так
Всё.

1. Строки 9-11. Массивы такого размера надо размещать либо в глобальной области, либо в куче. Но не в стеке. Зависит от ключей коипилятора, но с большой вероятностью программа просто вылетит, не дойдя даже до входных данных.

2. Решили пользоваться массивами? Хорошо, пусть массивы. Зачем вы считываете в память вторую последовательность чисел? В каждый момент времени из неё вам нужно только одно число.

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
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <set>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int main()
{
    size_t n = 0, m = 0;
 
    cin >> n >> m;
    if (n == 0 || m == 0) {
        cout << 0 << endl;
        return 0;
    }
 
    set<int> a1;               // номера марок первого альбома
    vector<int> dbl;           // номера совпадающих марок
    int num;
 
    dbl.resize(min(n, m));
 
    for (size_t i = 0; i < n; ++i) {
        cin >> num;
        a1.insert(num);
    }
 
    size_t k = 0;
    for (size_t i = 0; i < m; ++i) {
        cin >> num;
        auto result = a1.find(num);
        if (result != a1.end()) {
            dbl[k++] = num;
        }
    }
    dbl.resize(k);             // обрезать вектор до необходимой длины
 
    sort(dbl.begin(), dbl.end());
 
    cout << dbl.size() << endl;
    for (int n : dbl)
        cout << n << ' ';
    cout << endl;
}
У set под капотом двоичное дерево. Поэтому поиск занимает логарифмическое время. У вас поиск по массиву линейный.
0
817 / 504 / 211
Регистрация: 19.01.2019
Сообщений: 1,196
17.11.2019, 18:42 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
#include <iostream>
#include <bitset>
#include <set>
 
int main()
{
    size_t n, m, cnt(0);
    uint32_t buff;
    std::set<uint32_t> set;
    std::bitset<1'000'000'001>* bs = new std::bitset<1'000'000'001>;
 
    std::cin >> n >> m;
    n += m;
    while (n--) {
        std::cin >> buff;
        if (bs->test(buff)) {
            ++cnt;
            set.insert(buff);
        }
        bs->set(buff);
    }
    std::cout << cnt << '\n';
    for (auto& it : set)
        std::cout << it << ' ';
 
    delete bs;
    return 0;
}
1
17.11.2019, 18:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.11.2019, 18:42
Помогаю со студенческими работами здесь

Определить список заражённых компьютеров (олимпиадная задача)
Вирус в сети Ограничение времени 1 секунда Ограничение памяти 256Mb Ввод стандартный ввод или...

Определить количество совпадающих элементов двух упорядоченных массивов
определить количество совпадающих элементов двух упорядоченных массивов А и В

Определить количество совпадающих элементов двух упорядоченных массивов
Дано: упорядоченные по возрастанию массивы A(N), B(N), C(M), D(M). Определить количество...

Определить количество совпадающих элементов двух упорядоченных массивов
Определить количество совпадающих элементов двух упорядоченных массивов А и В(размерность А и В не...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru