Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
 Аватар для ivan_proger
3 / 3 / 2
Регистрация: 07.08.2018
Сообщений: 84

B. ДНК - классификатор

24.12.2019, 22:56. Показов 1786. Ответов 2
Метки с++ (Все метки)

Студворк — интернет-сервис помощи студентам
В лабораторию к дядюшке Юлиусу зашла его племянница Галя. Гале очень нравилась математика, но биологией она абсолютно не интересовалась. Дядюшка Юлиус отправился за очередной кружкой кофе, а Галя, заскучав, обратила внимание на список из N фрагментов ДНК очередного гибрида динозавра с лягушкой. Все фрагменты состояли из латинских заглавных букв `A', `T', `C', `G' (аденин, тимин, цитозин, гуанин). Поскольку Гале эти буквы ни о чем не говорили, она начала классифицировать фрагменты. Два фрагмента она назвала эквивалентными, если из первого можно получить второй перестановкой букв. Множества всех эквивалентных между собой фрагментов она собирала в подмножества, которые назвала классами эквивалентности.

Когда вернулся дядюшка Юлиус, она предоставила ему результат своих трудов, а именно найденное количество классов эквивалентности, а также состав каждого класса.

Ваша задача: проделать ровно ту же работу, что и Галя. Вперед!

Формат ввода
В первой строке дано число N - количество имеющихся фрагментов ДНК (1 ≤ N ≤ 105).

В следующих n строках находятся сами фрагменты - слова, состоящие из латинских заглавных букв `A', `T', `C', `G', по одному слову в каждой строке.

Суммарная длина всех фрагментов не превосходит 5 ⋅ 106.

Формат вывода
В первой строке вывести q - количество классов эквивалентности.

В следующих q строках вывести через пробел фрагменты, входящие в состав класса.

Классы, как и фрагменты внутри, можно выводить в любом порядке.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.12.2019, 22:56
Ответы с готовыми решениями:

Найти ID цепочки ДНК, имеющей наибольший показатель содержания GC
Здравствуйте, как можно дописать код, чтобы программа заработала? Вот условие и сама программа: Дано: Максимум 10 цепочек ДНК в формате...

Байесовский классификатор
Ребят,у кого-нибудь есть пример реализации байесовского классификатора для текстов???:cry:

По исходной и требуемой цепочкам ДНК найти необходимую для этого цепочку элементарных преобразований
Преобразование ДНК Биологи лаборатории Advanced Celluar Mechanics Lab. (ACM Lab.) занимаются исследованиями в области геномов и...

2
245 / 17 / 5
Регистрация: 18.12.2019
Сообщений: 33
27.12.2019, 11:50
Можно отсортировать буквы в каждом фрагменте, тогда эквивалентные станут одинаковыми.
0
913 / 339 / 135
Регистрация: 18.07.2017
Сообщений: 1,485
28.12.2019, 11:37
Цитата Сообщение от SandCat Посмотреть сообщение
Можно отсортировать буквы в каждом фрагменте
Зачем? Просто посчитать количество одинаковых букв.
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
46
47
48
49
50
51
52
53
54
55
56
#include <stdint.h>
#include <iostream>
 
using namespace std;
 
union fragment{
    struct{
        int8_t A;
        int8_t T;
        int8_t C;
        int8_t G;       
    }gen;
    int32_t mask;
};
 
int main(int argc, char** argv){
    fragment* fragments = new fragment[argc];
    for(size_t i = argc; --i;){
        fragments[i].mask = 0;
 
        char* ptr = argv[i];
        while(*ptr){
            switch(*ptr){
                case 'A': 
                    fragments[i].gen.A++;
                    break;
                case 'T': 
                    fragments[i].gen.T++;
                    break;
                case 'C': 
                    fragments[i].gen.C++;
                    break;
                case 'G': 
                    fragments[i].gen.G++;
                    break;
            }
            ptr++;
        }
    }
    size_t i = argc-1;
    while (i)
    {
        int32_t cur_mask = fragments[i].mask;
        for(int j = i; j; j--){
            if(fragments[j].mask == cur_mask){
                cout << argv[j];
                char* ptr = argv[i];
                argv[i] = argv[j];
                argv[j] = ptr;
                i--;
            }
            cout << '\n';
        }
    }
    system("pause");
}

Не по теме:

Можно было vector использовать, но я давно на плюсах не писал, сишный стиль ближе



Добавлено через 12 минут
Цитата Сообщение от ivan_proger Посмотреть сообщение
Суммарная длина всех фрагментов не превосходит 5 ⋅ 106.
Не учел, что может быть всего один фрагмент такой длины. Нужно использовать другие типы, чтобы не было переполнения:
int8_t -> int16_t
int32_t -> int64_t
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.12.2019, 11:37
Помогаю со студенческими работами здесь

ДНК
Возьмем 1 человека . У этого 1 человека имеется 100 000 днк. Каждый днк имеет около 50 000 кровенных потоков. Как определить группу крови...

Нарисовать молекулу ДНК
Должна получиться примерно такая картинка цвет шариков надо читать из файла, но это не сложно. Главная проблема - не знаю, как...

ДНК супер гены?
Как по вашему в генах кодируется способность рыть берлоги у медведей структура муравейника у муровьёв или гнёзд у птиц? Добавлено...

Динамическая графика молекулы ДНК
Помогите, пожалуйста, сделать динамическую графику

Конфликт сетей или ошибка в ДНК?
Есть две сети. 1. root.biz: По кабелю в ноут идет корпоративная доменная сеть 10.x.x.x, настройки тянутся автоматом, сам ноут домен...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru