Обновить
1

M. Sc., Junior Researcher, Postgraduate Student

2
Подписчики
Отправить сообщение

Я вот помню, как мне купили компьютер где-то в 2007 г., и на нем стояла Windows Vista, которая мне очень понравилась. UAC, на который тут жаловались, можно было отключить. Тормозов я не наблюдал. После Vista на XP вообще возвращаться не хотелось.

  1. Можно проверить хэш-сумму библиотеки. 2+3. В Windows можно использовать LoadLibraryW (LoadLibraryExW) + GetProcAddress. Перед загрузкой библиотеки этом способом можно проверить версию библиотеки через GetFileVersionInfoSizeW + GetFileVersionInfoW + VerQueryValueW.

А потом оказывается, что эта библиотека не совместима с текущим рантаймом. Удачи подключать библиотеки .net framework в .net core > 3. Примерно тоже самое касается .netcore - .net standard.

А потом оказывается, что эта библиотека тянет за собой unmanaged .dll (или .so, или .dylib), которая может иметь не ту разрядность, не ту архитектуру, использовать API операционной системы, которого может не быть в старых системах, где предполагается работа продукта, или вообще скомпилирована с использованием дополнительного набора инструкций, который не поддерживаются процессором большинства пользователей.

Прагмы я сейчас добавил, чтобы показать, что этот код даже с максимальным числом оптимизаций все равно остается достаточно медленным циклом, в отличии от такого подхода: https://godbolt.org/z/7ejvnerGP (без прагм), https://godbolt.org/z/E8e1994Mh (с прагмами). А про прагмы вполне можно знать, не зная про std::bitset: `pragma warning`, `#pragma comment(lib, "<LIB_NAME>")`, `#pragma comment(linker, "/STACK:<STACK_SIZE>")` -- это MSVC прагмы, но все же.

А сколько учителей и школьников знало про виртуальную машину в те годы? Понятное дело, что можно накатить на виртуальную машину и подготовиться, да только вот школьные компьютеры не достаточно мощные, чтобы тянуть виртуальную машину. Да и учителя школьные (и школьники) в массе бы не разобрались с виртуальной машиной. Для некоторых учителей (даже информатики) в 2010-ых компьютер был некой шайтан-машиной. В 2014 можно было встретить компы в школах с 196 МБ ОЗУ и Windows 2000, типа на таких даже иногда стандартный виндовый софт, который нужен был для выполнения учебного плана, не всегда работал. И это несмотря на то, что правилах олимпиады было написано что решения тестируются на компьютере с тактовой частотой CPU не менее 2 ГГЦ, но школьнику для написания решений такой комп скорее всего не предоставили бы, а могли даже дать вот тот с 196 МБ ОЗУ и Windows 2000.

Они использовали что-то типа такого: https://godbolt.org/z/b6re7c56j. Как видно, в одну команду это не компилируется, даже если добавить прагм: https://godbolt.org/z/jTWq6EGq1. Про std::bitset тоже мало кто знал (может, от силы, человек 3-5 из 130).

А у школьников и учителей сейчас нет проблем с Linux? Просто я в 2016 спросил у моего тренера (он тогда был членом жюри на областном этапе, а сейчас он член жюри на республиканском этапе), раз вы так пытаетесь равняться на международный этап (все, что доступно на международном этапе, должно быть доступно на любом этапе республиканской олимпиады), то почему не используем Linux? Ведь он лучше для этих целей, и на нем решения проще пихать (да, бывали случаи, что авторское решение само еле-еле в TL влазило): nonlocking stdio functions, лучшие аллокаторы (в glibs так то очень хороший malloc, где-то на хабре видел бенчмарки, что он даже может работать быстрее jemalloc), хороший эмулятор терминала (GNOME Terminal, дело было в те времена, когда на Windows был только дефольный cmd, а Windows Terminal появился гораздо позже)... Так его ответ был примерно таким: "У нас учителя и, что более важно, школьники не знают как пользоваться Linuх, будут проблемы. Ладно я знаю, ладно ты знаешь, и тебе будет проще. Ладно там жюри умеет и сможет всем поставить Linux, но для большинства школьников это создаст существенные проблемы." Хотя мы даже в диалоге подразумевали простой дистрибутив Linux: Ubuntu, речь там про установку какой-нибуть Slackware, Arch или Gentoo не шла.

Р. S. Более подробно про ситуацию, где авторское решение еле-еле влазило в TL (т. е. авторское решение не работало за 0.5 * TL). Был случай такой, что было решение последней задачи на республиканском этапе, где жюри не было уверено, что авторское решение вообще влезет в TL (да, у нас в Беларуси жюри вообще не готовит задачи, их готовит отдельная команда). Что им пришлось додумывать оптимизацию с заменой на std::map на сжатие координат + бор (ну типа бюджетное vEB tree). Хотя у некоторых участников решение с std::map таки заходило, по видимому, надо было аккуратно писать. std::unordered_map вроде ML получало. Некоторые от страха написали свою дерамиду.

Когда в 2014-2016 гг. я писал школьные олимпиадки, то у нас как правило был Code::Blocks и Microsoft Visual C++ Community Edition, иногда еще могли дать Dev C++. А где-то еще могли по старой памяти дополнительно установить Turbo C и/или Borland C++. Я обычно использовал Dev C++, а если его не было, то Visual C++. Основная проблема для меня была это отсутствие нормальных шрифтов на компьютерах, предоставляемых для написания олимпиады: был в основном только Counter New из моноширинных, и не было Consolas, который я предпочитаю. Я даже просил жюри порешать этот вопрос со шрифтами, но они сказали, что с этим ничего сделать не могут. Ну и без ReSharper'а не по кайфу кодить было.

Поэтому у меня возникает вопрос, что с Microsoft Visual C++ не то? Он вроде просто устанавливается. Я, конечно, часть причин понимаю: это не g++, на котором проверяют решения, что выливается в отсутствие поддержки gcc'измов, которые порой слишком имба (да, я помню как я и чуваки которые знали про __builtlin_popcount получили 78 баллов за задачу на республике вместо 60-64 у ребят, которые не знали про __builtlin_popcount). Я и мой одноклассник как-то в 11 классе на все компы в кабинете информатики ставили Microsoft Visual C++ типа надо было класс к олимпиаде подготовить.

Что касается Dev C++, то я не знаю жив ли он сейчас. Но если он жив, то почему его сейчас не используют? Вроде тоже просто ставиться и там g++ из коробки. Также в университете я и один мой одногруппник на Dev C++ лабы сдавали.

А с Code::Blocks че не так? Не, ну мне просто Dev C++ и Microsoft Visual C++ нравились больше, но это субъективно же. Часто на Codeforces проскакивают комментарии про хейт Code::Blocks, но в чем блин там проблема? Может хотя бы в этот раз я получу ответ на этот вопрос.

По крайней мере, то, что я сказал, для g++ будет верно. В clang походу также, как и в Microsoft Visual C++ не поддерживается std::ios::sync_with_stdio(false); (ну как бы такая функция есть, но она ничего не делает, т. е. std::cin и std::cout не ускоряются от нее): 1, 2.

Если правильно использовать (std::ios::sync_with_stdio(false); std::cin.tie(nullptr); и не пользоваться std::endl (он сбрасывает буффер вывода, вместо него лучше использовать '\n' -- это не сбрасывает буффер вывода), то std::cin и std::cout будут быстрее. Другое дело, что в Microsoft Visual C++ не поддерживается std::ios::sync_with_stdio(false); (ну как бы такая функция есть, но она ничего не делает, т. е. std::cin и std::cout не ускоряются от нее)... Но даже так в C++ стандартный ввод-вывод все еще остается достаточно медленным.

 А почему в C++ выделить память сложнее с выравниванием? Есть же T *PTR = new (std::align_val_t(ALIGN)) T[ARRAY_SIZE] (для удаления delete[] (std::align_val_t(ALIGN), PTR), также есть версия без []) или std::aligned_alloc (для удаления std::free). Более того, вы просили пример, вот он: https://pastebin.com/TPHftGiA (да, я использовал rand(), который типа C, -- но это просто для заполнения массива, то, что вы просили, сделано средствами C++).

Это условие не обязательно. Стандартный RMQ сводится к LCA, а LCA сводится к RMQ, где соседние элементы различаются на единицу.

Двенадцатую задачу можно также решить с подготовкой за O(n)и ответом на запрос за O(1), используя алгоритм алгоритм Фараха-Колтона и Бендера.

Невозможно одолеть рейдового босса в одиночку.

На самом деле, некоторых боссов на некоторых специализациях возможно победить в одиночку (я имею в виду ситуацию, когда босс не устарел, т. е. босс находится в актуальном рейде). Примеры: Protection Paladin vs The Primal Council (Normal), Protection Paladin vs Shriekwing (Mythic), Blood Death Knight vs Il'gynoth (Heroic), Blood Death Knight vs Sludgefist (Mythic) -- можно еще примеров привести...

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

Нету фласок, потов (зелий) и чарок (зачарованного оружие) -- нафиг с рейда, такие нам не нужны, таких мы вагонить не будем.

Я немного извиняюсь за тупость, но у меня вот такой вопрос: если у меня в MVVM классы Model и ViewModel сливаются в один класс, то что это? С одной стороны, это не View-Model, поскольку код работы с моделями не пишется прямо в отображении. С другой стороны, это не Model-View, поскольку пользователь не взаимодействует с моделью напрямую, да и модель не знает как себя представлять. В коде это выглядит как-то так: https://pastebin.com/0Xst5chU

И кроме того, почему в голосовании можно выбирать лишь одну опцию? Что делать, если в приложении одновременно используются разные паттерны?

"Пример 9: Ответ неизвестен правилен ли". Эхх..., а ведь можно было просто подставить и убедиться в правильности решения.

Когда я учился, такое начинали вводить. Но обратите внимание, в документе написано "при повторном текущем контроле", т. е. это не относиться к обычным лекциям и практическим занятиям. Это относиться к прогулам контрольных мероприятий, таких как коллоквиум, контрольная работа и т. д. и т. п. Либо если студент завалил такое мероприятие (получил отрицательную отметку), то он должен перепройти его платно.

Не все преподаватели отмечают. А в БГУ так то достаточно лояльно относятся к пропускам и прогулам (хотя это зависит от преподавателя), по сравнению с другими вузами Беларуси. А отчислением за пропуски (и плохие знания) просто пугают. Все дело в том, что нету платных отработок за прогулы, как в других ВУЗах, например, БНТУ, где если прогулял занятие, то должен платно его отработать. Вообще, посещаемость высокая только на лекциях, где отмечают посещаемость, поскольку за прогулы можно получить выговор, а за 3 выговора -- отчисление. Иначе из 40 человек обычно придут человек пять (2-3 курс).

Чтобы не запутаться в множественных условиях, можно использовать std::tie для упаковки объекта в std::tuple перед сравнением:

Для подобных целей я использую std::make_pair из С++98 вместо более нового предлагаемого авторами std::tie из С++11. И поэтому у меня возникает вопрос: что эффективнее?

Вообще, статья (и подобные статьи) напоминают мне случай из одной олимпиады, в которой я учавствовал, когда из-за неправильно реализованного компаратора вместо 50 баллов за задачу я получил 30. Но рофл в том, что это ни на что не повлияло.

Не, ну то, что сырые указатели есть, это уже хорошо. А как в Rust со всякими кастами? Как borrow checker на указателях работает?

Информация

В рейтинге
6 158-й
Откуда
Беларусь
Дата рождения
Зарегистрирован
Активность