Loading...
Yoana_Borisova avatar Yoana_Borisova 4 Точки

Judge Assiment 3 03.Message

Здравейте! Решавам Judge Assiment 3 но изпитвам затруднения с 03.Message от него. Ето кода, който написах. На пръв поглед тестовете, които аз пускам минават, но джудж дава само 10/100. Извинявам се за объркания код, надявам се да може да се чете!

https://pastebin.pl/view/3e9911aa

 

Тагове:
0
C++ Advanced
Smeshan avatar Smeshan 89 Точки

Привет,
на мен не ми отваря линка - можеш ли да го провериш ?

Поздрави,
Илиян

0
Yoana_Borisova avatar Yoana_Borisova 4 Точки

Мисля, че когато го пейстнеш в гугъл става

0
Yoana_Borisova avatar Yoana_Borisova 4 Точки

Mалко се поомотах с кода но успях да го поправя и да искарам 100/100

 

0
20/06/2021 18:14:04
Smeshan avatar Smeshan 89 Точки

Супер, аз тъкмо го гледах, забелязах, че принтираш точка с празно вместо само с точка накрая. Но пак беше 10/100.
Иначе aз я реших като първо прочитам директно в map думите с техния брой. След което от този мап напълних два вектора - words и wordsCount.  А командите за принт прочетох в pair<int, int>. И така накрая и аз пълня един set, но функцията ми изглежда така:

void findWordsInSequence(const std::vector<std::pair<int, int>>& commands,
                         const std::vector<std::string>& words,
                         const std::vector<int>& wordsCount) {
    for (const std::pair<int, int>& command : commands) {
        std::set<std::string> outputWords;
        for (size_t i = 0; i < wordsCount.size(); ++i) {
            if (command.first == wordsCount[i]) {
                outputWords.insert(words[i]);
            }
        }
        bool isWord = false;
        int outputPos = 0;
        for (const auto word : outputWords) {
            if (outputPos == command.second) {
                std::cout << word << std::endl;
                isWord = true;
                break;
            }
            outputPos++;
        }
        if (!isWord) {
            std::cout << '.' << std::endl;
        }
    }
}

 

0
Yoana_Borisova avatar Yoana_Borisova 4 Точки

Ясно! Благодаря все пак за отделеното време! То все пак главната грешка в моя код беше, че в мап се опитвах да запазя еднакви ключове с различни стойности откъдето и се получи объркване. Все пак успях да го поправя с вектори

1
DimovIvan avatar DimovIvan 16 Точки

Здравейте, колеги!

Пробвах и аз да чета директно входа в мап, но не ми се получава със стрийма нещо. Понякога ми взима две думи за една. Това ми е функцията за четене в мап:

std::map<std::string, int> getWordsOccurrences() {
    std::map<std::string, int> wordsOccurrences;
    
    std::string line;
    getline(std::cin, line);
    std::istringstream istr(line);

    const std::string delimiter = ".";
    std::string word;
    while (true)
    {
        istr >> word;
        if (word == delimiter)
        {
            break;
        }
        auto it = wordsOccurrences.find(word);
        if (it == wordsOccurrences.end())
        {
            wordsOccurrences.insert(make_pair(word, 1));
        }
        else
        {
            wordsOccurrences[word]++;
        }
    }
    
    return wordsOccurrences;
}

Като принтна мапа с този вход: chug a mug of mead and another mug mead chug another mug of mead warrior .

for (auto it = wordsOccurrences.begin(); it != wordsOccurrences.end(); it++) {
        std::cout << it->first << ' ' << it->second << std::endl;
    }

ми дава следното:

а 1

another 2

chug 1

mead 1

mead and 1 // чете го като една дума

mead chug 1 // чете го като една дума също

mug 3

of 2

warrior 1

Пробвах да чета и с getline(istr, word, ' '), но ми изкарва същия резултат. Не мога да разбера защо на два пъти ми взема две думи от входа за една. Посочете ми грешката защото аз съм в шах

0
j.petrov_90 avatar j.petrov_90 373 Точки

Привет,

Аз не виждам грешка в кода ти.
Пробвах го локално при мен и ратоби. Поне това, което си дал като пример.

Единствено, което се сещам, но е малко вероятно е някъде измежду input-а на тестовете да е попаднал Unicode text. Това би объркало програмата ти, която очаква ASCII код.
Все пак това е само wild guess :)

0
DimovIvan avatar DimovIvan 16 Точки

Странно, но наистина явно няма грешка в кода. При мен изкарва грешни резултати заради това, че на две места стрийма ми приема две думи за една, но в judge тестовите минават. Явно проблема е в моя телевизор, но не знам какво точно се бъгва. Мисля, че на един тест ми даваше time limit, но не съм сигурен, а и вече не мога да проверя. В този ред на мисли, след поправителния изпит задачите от judge assiment - ите ще бъдат ли пак активни в judge системата?

https://pastebin.com/3Yq7Ga3T

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.