Блог пользователя Sabzi

Автор Sabzi, 9 лет назад, По-русски

Помогите пожалуйста с задачей 501B - Misha and Changing Handles ~~~~~ ~~~~~

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

  • Проголосовать: нравится
  • +3
  • Проголосовать: не нравится

»
9 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

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

int n; cin >> n;
pair <string , string> db[n];

Так должно быть:

int n; cin >> n;
pair <string , string>* db = new pair<string, string>[n];
// your code here...
delete[] db;
  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +8 Проголосовать: не нравится

    на GNU можно:)

    • »
      »
      »
      9 лет назад, # ^ |
        Проголосовать: нравится +8 Проголосовать: не нравится

      Можно, но так делать не стоит, я считаю. Причины:

      1. Это нестандартное расширение GNU. На какой-нибудь олимпиаде его может и не быть или случайно отключены расширения.
      2. Массив выделяется на стеке. Если войдёт в привычку — вы с такой же лёгкостью выделите массив на миллион элементов на стеке и получите stack overflow на какой-нибудь системе, где стэк всё еще восемь мегабайт.
      3. Есть vector<>. Он везде в плюсах есть и как раз сделан для массивов динамического размера.
  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +8 Проголосовать: не нравится

    Мне кажется, не стоит использовать new[] и delete[] без очень веской причины. vector<> умеет всё то же самое (и даже больше), а работает не сильно медленнее.

    int n;
    cin >> n;
    vector<pair<string, string>> db(n);
    
    db[0] = make_pair("a", "b"); // example
    
    // no need in explicit deletion - all memory will be automatically deallocated