Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/34: Рейтинг темы: голосов - 34, средняя оценка - 4.71
10 / 59 / 21
Регистрация: 12.03.2017
Сообщений: 514
1

Мутанты

31.10.2017, 11:22. Показов 6167. Ответов 26
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Уже долгое время в Институте Искусств, Мутантов и Информационных Технологий разводят милых разноцветных зверюшек. Для удобства каждый цвет обозначен своим номером, всего цветов не более 109. В один из прекрасных дней в питомнике случилось чудо: все зверюшки выстроились в ряд в порядке возрастания цветов. Пользуясь случаем, лаборанты решили посчитать, сколько зверюшек разных цветов живет в питомнике, и, по закону жанра, попросили вас написать программу, которая поможет им в решении этой нелегкой задачи.

Формат входных данных
В первой строке входного файла содержится единственное число N (0≤N≤105) — количество зверюшек в Институте. В следующей строке находятся N упорядоченных по неубыванию неотрицательных целых чисел, не превосходящих 109 и разделенных пробелами — их цвета. В третьей строке файла записано число M (1≤M≤100000) — количество запросов вашей программе, в следующей строке через пробел записаны M целых неотрицательных чисел (не превышающих 109+1).

Формат выходных данных
Выходной файл должен содержать M строчек. Для каждого запроса выведите число зверюшек заданного цвета в питомнике.

Примеры
входные данные
10
1 1 3 3 5 7 9 18 18 57
5
57 3 9 1 179
выходные данные
1
2
1
2
0
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.10.2017, 11:22
Ответы с готовыми решениями:

Бинарный поиск. Мутанты
Задачу я решил, но она не укладывается во время, потому что бинарный поиск, реализованный мной,...

Задача Мутанты
Добый день, решите задачу пожалуйста! На pascal

Животные-мутанты (фотошопа)

Усовершенствовать решение задачи "Муравьи-мутанты"
Всем привет. Написала код к задаче "Муравьи-мутанты", но он не проходит некоторые тесты по времени....


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

Или воспользуйтесь поиском по форуму:
26
1352 / 851 / 365
Регистрация: 26.02.2015
Сообщений: 3,799
31.10.2017, 11:29 2
Наработки уже есть какие-то? Что сами сделали?
0
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
31.10.2017, 11:40 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ifstream inFile("data");
ofstream outFile("result");
map<int, int> animals;
 
int n, m, i, x;
 
inFile >> n;
for(i(0); i < n; ++i) {
   inFile >> color;
   ++animals[color];
}
 
inFile >> m;
for(i(0); i < m; ++i) {
   inFile >> x;
   outFile << animals[x] << "\n";
}
0
672 / 475 / 215
Регистрация: 06.09.2013
Сообщений: 1,306
31.10.2017, 11:45 4
mat_for_c, это же расточительно с точки зрения памяти, 10^9 цветов может быть.
В отсортированном массиве - можно просчитать за один пробег как в поиске максимума, считая длины подпоследовательностей с одинаковыми элементами.
Лучше - использовать бинарный поиск с двумя разными сравнениями.
0
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
31.10.2017, 11:47 5
Цитата Сообщение от woldemas Посмотреть сообщение
mat_for_c, это же расточительно с точки зрения памяти, 10^9 цветов может быть.
начнем с того, что элементов всего 10^5
0
672 / 475 / 215
Регистрация: 06.09.2013
Сообщений: 1,306
31.10.2017, 11:50 6
Цитата Сообщение от mat_for_c Посмотреть сообщение
начнем с того, что элементов всего 10^5
Тоже много, если все разноцветные.
0
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
31.10.2017, 11:50 7
Цитата Сообщение от woldemas Посмотреть сообщение
Лучше - использовать бинарный поиск с двумя разными сравнениями.
вставка в словарь как раз использует бинарный поиск
0
672 / 475 / 215
Регистрация: 06.09.2013
Сообщений: 1,306
31.10.2017, 11:52 8
Цитата Сообщение от mat_for_c Посмотреть сообщение
вставка в словарь как раз использует бинарный поиск
Да, но для каждого элемента массива, то есть сложность вашего алгоритма будет n log(n).
А если бинарным поиском найти начала и конец интервала цвета - сложность 2 log(n)
0
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
31.10.2017, 11:55 9
Цитата Сообщение от woldemas Посмотреть сообщение
это же расточительно с точки зрения памяти
давай подсчитаем. 10000 элементов в словаре, т.е. 20000*4 байт = 80000 Б = 781,25 КБ = 0,762940 MБ.
если вы уж не найдете 1 мб оперативки, мне жаль вас...

Добавлено через 1 минуту
Цитата Сообщение от woldemas Посмотреть сообщение
Да, но для каждого элемента массива, то есть сложность вашего алгоритма будет n log(n).
А если бинарным поиском найти начала и конец интервала цвета - сложность 2 log(n)
т.е. вопрос уже не в памяти)
0
672 / 475 / 215
Регистрация: 06.09.2013
Сообщений: 1,306
31.10.2017, 11:57 10
Цитата Сообщение от mat_for_c Посмотреть сообщение
вопрос уже не в памяти)
И в памяти, и во времени выполнения.
Если можно реализовать лучше по обоим критериям, почему бы это не сделать?
0
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
31.10.2017, 11:58 11
Цитата Сообщение от woldemas Посмотреть сообщение
Если можно реализовать лучше по обоим критериям, почему бы это не сделать?
так предлагайте свое решение
0
10 / 59 / 21
Регистрация: 12.03.2017
Сообщений: 514
31.10.2017, 12:22  [ТС] 12
Мне нужна целая работающая программа.
0
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,884
31.10.2017, 13:12 13
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
FILE *pf = fopen("in.txt", "rt");
  fscanf(pf, "%u%*c", &N);
  
  {
    char buf[100];
    do{
      buf[98]=0;
      fgets(buf, 100, pf);
    }while(buf[98]!=0);
  }
  
  fscanf(pf, "%u", &M);
  color = malloc(sizeof(*color)*M);
  num = calloc(sizeof(*num), M);
  for(i=0; i<M; i++)fscanf(pf, "%u", &color[i]);
  rewind(pf);
  fscanf(pf, "%*u");
  for(i=0; i<N; i++){
    fscanf(pf, "%u", &cur_color);
    for(j=0; j<M; j++)if(cur_color == color[j])num[j]++; //я бы сделал break, но цвета могут повторяться
  }
  fclose(pf);
  pf = fopen("out.txt", "wt");
  for(i=0; i<M; i++)fprintf(pf, "%u\n", num[i]);
  fclose(pf);
  free(color);
  free(num);
  return 0;
0
10 / 59 / 21
Регистрация: 12.03.2017
Сообщений: 514
01.11.2017, 12:01  [ТС] 14
Мне нужно на С++. И только. Я язык С не изучал.

Добавлено через 17 часов 32 минуты
Пожалуйста, сделайте программу на С++
0
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,884
01.11.2017, 12:58 15
Тебе уже привели два варианта. Если ты не в состоянии их понять, надо не ныть и спамить, а почитать литературу. Основную работу - алгоритм - за тебя уже сделали, осталось дописать пару строк.
1
10 / 59 / 21
Регистрация: 12.03.2017
Сообщений: 514
01.11.2017, 17:56  [ТС] 16
Мне нужна целая программа
0
2664 / 2239 / 240
Регистрация: 03.07.2012
Сообщений: 8,141
Записей в блоге: 1
02.11.2017, 20:50 17
Цитата Сообщение от Pavlin234 Посмотреть сообщение
Мне нужна целая программа
А зачем нужна, да еще целая?

Добавлено через 15 секунд
Цитата Сообщение от Pavlin234 Посмотреть сообщение
Мне нужна целая программа
А зачем нужна, да еще целая?
0
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,884
02.11.2017, 22:36 18
Чтобы обмануть учителя будто это он ее сделал, очевидно же
0
ISergey
03.11.2017, 03:09
  #19

Не по теме:

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Чтобы обмануть учителя будто это он ее сделал, очевидно же
Когда то очень давно (сам учился), я старался решать как можно больше задач на форуме с одной мыслей - чем больше сделаю, тем больше опыта и меньше конкурентов.)) (но видимо ошибался... всем не помочь)) )

0
COKPOWEHEU
03.11.2017, 06:04     Мутанты
  #20

Не по теме:

Странная мотивация. Те, кто задают подобные вопросы по форумам, вряд ли пойдут работать по специальности - им это не интересно, либо просто не удержатся на работе.
А вот получение опыта для себя - другое дело. Выбираем интересную задачу, решаем, сравниваем с чужими решениями.

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