misis_VShtefanko's blog

By misis_VShtefanko, history, 11 years ago, translation, In English

Wrong answer on test 6:

http://codeforces.me/problemset/problem/462/B?locale=ru

#include <iostream>
#include "stdio.h"
#include <algorithm>
#include <cmath>

using namespace std;

bool cmp (int i, int j){
    return i > j;
}
int main(int argc, const char * argv[]) {
    
    int n, k;
    cin >> n >> k;
    char arr[n];
    for (int i = 0; i < n; i++)
    {
        cin >> arr[i];
    }
    sort(arr,arr + n);
    int summ[n];
    int s = 0;
    summ[0] = 0;
    for (int i = 0; i < n; i++)
    {
        if (arr[i] == arr[i+1]) {
            summ[s]++;
        } else
        {
            s++;
            summ[s]=0;
        }
    }
    int res = 0;
    sort(summ,summ + s,cmp);
    int b[s];
    int l = 0;
    for (int i = 0; i < s; i++) {
        summ[i]++;
        if (k <= summ[i])
        {
            b[l++] = k;
            k = 0;
        } else {
            b[l++] = summ[i];
            k -= summ[i];
        }
    }
    for (int i = 0; i < l; i++)
    {
        res += b[i]*b[i];
    }
    cout << res;
}

I'm using XCode c++ compiler.

And test 6 (2 2 BL) works great.

Why wrong answer on codeforces? Thank you.

  • Vote: I like it
  • +2
  • Vote: I do not like it

»
11 years ago, hide # |
 
Vote: I like it +3 Vote: I do not like it

char arr[n]; // should be n + 1 ... for (int i = 0; i < n; i++) { if (arr[i] == arr[i+1]) // access violation. When i == n — 1, i + 1 == n

And you should read string like this: cin >> arr; cin >> (char) can read spaces or line breaks instead of letters.