Форум программистов, компьютерный форум CyberForum.ru

Задача с Тимуса 1446 - C++

Восстановить пароль Регистрация
 
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
10.07.2013, 17:11     Задача с Тимуса 1446 #1
Всем привет. Я несколько дней бился над задачей с Тимуса. Вот ссыль: вырезано Задача не сложная - просто ввести строки, например, в 4 вектора и вывести их. Но я столкнулся с проблемой в считывании. Я не знаю, что там может быть, но система как-то странно себя ведет: то WA, Runtime Error, Memory Limit. Я написал решение:
Решение №1
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <iostream>
#include <istream>
#include <ostream>
#include <cstdio>
#include <string>
#include <vector>
#include <cctype>
 
#pragma once
 
using namespace std;
 
class School
{
public:
    string gryffindor() const { return "Gryffindor"; }
    string slytherin() const { return "Slytherin"; }
    string hufflepuff() const { return "Hufflepuff"; }
    string ravenclaw() const { return "Ravenclaw"; }
    School() { fac_gryffindor.clear(); fac_slytherin.clear(); fac_hufflepuff.clear(); fac_ravenclaw.clear(); }
    void add_gryffindor(string s) { fac_gryffindor.push_back(s); }
    void add_slytherin(string s) { fac_slytherin.push_back(s); }
    void add_hufflepuff(string s) { fac_hufflepuff.push_back(s); }
    void add_ravenclaw(string s) { fac_ravenclaw.push_back(s); }
    void print(ostream&);
private:
    vector<string> fac_gryffindor;
    vector<string> fac_slytherin;
    vector<string> fac_hufflepuff;
    vector<string> fac_ravenclaw;
    void print_vector(const vector<string>&, const string, ostream&, const bool) const;
};
 
void School::print(ostream& os)
{
    print_vector(fac_slytherin, slytherin(), os, true);
    print_vector(fac_hufflepuff, hufflepuff(), os, true);
    print_vector(fac_gryffindor, gryffindor(), os, true);
    print_vector(fac_ravenclaw, ravenclaw(), os, false);
}
 
void School::print_vector(const vector<string>& arr, const string name, ostream& os, const bool print_newline) const
{
    os << name << ":\n";
    for (int i = 0; i<arr.size(); ++i)
        os << arr[i] << '\n';
    if (print_newline)
        os << '\n';
}
 
void enter_names(School& s, istream& is)
{
    int n;
    is >> n;
    std::cin.ignore();
    for (int i = 0; i<n; ++i)
    {
        string name;
        getline(is, name);
        is.clear();
        string faculty;
        getline(is, faculty);
 
        if (faculty == s.gryffindor())
            s.add_gryffindor(name);
        if (faculty == s.hufflepuff())
            s.add_hufflepuff(name);
        if (faculty == s.ravenclaw())
            s.add_ravenclaw(name);
        if (faculty == s.slytherin())
            s.add_slytherin(name);
    }
}
 
int main()
{
#ifndef ONLINE_DEBUG
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#endif
 
    School Hogwarts;
    enter_names(Hogwarts, std::cin);
    Hogwarts.print(std::cout);
    return 0;
}

Тестирующая система выбила TILE (Time Limit Exceeted). Я засмущался в потоках (хотя все должно быть быстро - не так уж и много входных данных) и написал решение с cstdio.
Решение №2
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <cstdio>
#include <cstring>
 
#pragma comment(linker, "/STACK:50331648")
 
int main()
{
#ifndef ONLINE_DEBUG
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#endif
    
    char a[1001][201];
    char b[1001][201];
    char c[1001][201];
    char d[1001][201];
    int a_len = 0, b_len = 0, c_len = 0, d_len = 0, n;
    char cc;
    
    scanf("%d", &n);
    getchar();
    for (int i = 0; i<n; ++i)
    {
        char name[201];
        gets(name);
        getchar();
        char faculty[2001];
        gets(faculty);
        getchar();
 
        if ( strcmp("Slytherin", faculty) == 0 )
        {
            strcpy(a[a_len], name);
            ++a_len;
        }
 
        if ( strcmp("Hufflepuff", faculty) == 0 )
        {
            strcpy(b[b_len], name);
            ++b_len;
        }
 
        if ( strcmp("Gryffindor", faculty) == 0 )
        {
            strcpy(c[c_len], name);
            ++c_len;
        }
 
        if ( strcmp("Ravenclaw", faculty) == 0 )
        {
            strcpy(d[d_len], name);
            ++d_len;
        }
    }
 
    printf("%s\n", "Slytherin:");
    for (int i = 0; i<a_len; ++i)
        printf("%s\n", a[i]);
    printf ("\n");
 
    
    printf("%s\n", "Hufflepuff:");
    for (int i = 0; i<b_len; ++i)
        printf("%s\n", b[i]);
    printf ("\n");
 
    
    printf("%s\n", "Gryffindor:");
    for (int i = 0; i<c_len; ++i)
        printf("%s\n", c[i]);
    printf ("\n");
 
    
    printf("%s\n", "Ravenclaw:");
    for (int i = 0; i<d_len; ++i)
        if (i < d_len-1)
            printf("%s\n", d[i]);
        else
            printf("%s", d[i]);
    
    return 0;
}

Что может быть не так?
Примечание: исходные коды могут незначительно отличаться от оригинала в связи с туевой хучей попыток сдачи задачи.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2013, 17:11     Задача с Тимуса 1446
Посмотрите здесь:

C++ задача с Тимуса
задача с Тимуса C++
Задача с тимуса C++
C++ Задача с тимуса
Олимпиадная задача с тимуса №1209 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zer0mail
2181 / 1864 / 187
Регистрация: 03.07.2012
Сообщений: 6,627
Записей в блоге: 1
10.07.2013, 19:04     Задача с Тимуса 1446 #2
ТС даже ссылку правильную дать не может...
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
10.07.2013, 19:12  [ТС]     Задача с Тимуса 1446 #3
zer0mail, прежде чем это писать, ты мог бы подумать головой про редирект и скопировать ссылку в адресную строку.
И... о чудо! Оно перешло на страницу с задачей!

Не по теме:

хорошо хоть тему апнул...

zer0mail
2181 / 1864 / 187
Регистрация: 03.07.2012
Сообщений: 6,627
Записей в блоге: 1
10.07.2013, 19:16     Задача с Тимуса 1446 #4
Разве я писал, что не нашел, как перейти? Я написал, что приведенная ТС ссылка неправильна, т.е. не работает.
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
10.07.2013, 19:17     Задача с Тимуса 1446 #5
ONLINE_DEBUG? А не ONLINE_JUDGE?
dr.curse
 Аватар для dr.curse
386 / 342 / 16
Регистрация: 11.10.2010
Сообщений: 1,907
10.07.2013, 19:17     Задача с Тимуса 1446 #6
Dani, у меня такоеже решение только я сравниваю названия не целиком а только первые буквы
вот мое решение если что
Кликните здесь для просмотра всего текста
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
#include <stdio.h>
char s[2000][400],ss[400];
int a[10][2000];
int main()
{
    int n,i;
    scanf("%d",&n);
    for (i=0;i<n;i++)
    {
        gets(s[i]);
        gets(s[i]);
        scanf("%s",ss);
        switch (ss[0])
        {
            case 'S':
                a[0][0]++;
                a[0][a[0][0]]=i;
                break;
            case 'H':
                a[1][0]++;
                a[1][a[1][0]]=i;
                break;
            case 'G':
                a[2][0]++;
                a[2][a[2][0]]=i;
                break;
            case 'R':
                a[3][0]++;
                a[3][a[3][0]]=i;
                break;
        }
    }
    printf("Slytherin:\n");
    for (i=0;i<a[0][0];i++)
        puts(s[a[0][i+1]]);
    printf("\n");
    printf("Hufflepuff:\n");
    for (i=0;i<a[1][0];i++)
        puts(s[a[1][i+1]]);
    printf("\n");
    printf("Gryffindor:\n");
    for (i=0;i<a[2][0];i++)
        puts(s[a[2][i+1]]);
    printf("\n");
    printf("Ravenclaw:\n");
    for (i=0;i<a[3][0];i++)
        puts(s[a[3][i+1]]);
    printf("\n");
    return 0;
}
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
10.07.2013, 19:19     Задача с Тимуса 1446 #7
Цитата Сообщение от zer0mail Посмотреть сообщение
Я написал, что приведенная ТС сылка неправильна, т.е. не работает.
Так ведь ссылка-то правильная, только не работает.
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
10.07.2013, 20:06  [ТС]     Задача с Тимуса 1446 #8
Somebody, спасибо огромное. Все прошло) Оказывается проблема не в вводе, а во невнимательности в час ночи)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2013, 20:50     Задача с Тимуса 1446
Еще ссылки по теме:

C++ Задача с тимуса №1881
Задача с тимуса про сороконожку C++
Предохранители. Задача с тимуса №1327 C++

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

Или воспользуйтесь поиском по форуму:
Taatshi
10.07.2013, 20:50     Задача с Тимуса 1446
  #9
 Комментарий модератора 
Dani, задание размещайте на форуме. Предупреждение.
Yandex
Объявления
10.07.2013, 20:50     Задача с Тимуса 1446
Ответ Создать тему

Метки
timus, никто не читает метки, я иногда читаю метки!
Опции темы

Текущее время: 15:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru