In this HackerEarth ICPC Team Management problem solution Little Chandan is an exceptional manager - apart from his role in HackerEarth - as the person who has to bug everyone, in general... and if possible, try to get some work done.

He's also offered a job as the coach of the best Russian teams participating in the ACM-ICPC World Finals. Now, Chandan is an extremely good coach, too. But he's a weird person who thrives on patterns in life, in general. So, he has decided that if there are n number of students in total, and he is supposed to divide them into camps of k students - he wants them to be arranged in such a way that the length of names of all the students in a camp is equal.

I know, totally weird, right?


HackerEarth ICPC Team Management problem solution


HackerEarth ICPC Team Management problem solution.

tc = int(raw_input())
assert(tc>0 and tc<51)
for i in xrange(tc):
    n, k = map(int, raw_input().split())
    l = [0]*1000
    ok = True
    assert(n>0 and n<1001)
    assert(k>0 and k<1001)
    assert(n>=k)
    assert(n%k==0)
    for j in xrange(n):
        a = raw_input()
        l[len(a)] +=1
    for z in l:
        if z%k!=0:
            ok = False
            break
    if (ok):
        print "Possible"
    else:
        print "Not possible"

Second solution

#include<bits/stdc++.h>
using namespace std;
#define ll              long long int
#define vi              vector<int>
#define vl              vector<ll>
#define pii             pair<int,int>
#define pil             pair<int, ll>
#define pll             pair<ll, ll>
#define pli             pair<ll, int>
#define pb(v, a)        v.push_back(a)
#define mp(a, b)        make_pair(a, b)
#define MOD             1000000007
#define rep(i, a, b)    for(i=a; i<=b; ++i)
#define rrep(i, a, b)   for(i=a; i>=b; --i)
#define si(a)           scanf("%d", &a)
#define sl(a)           scanf("%lld", &a)
#define pi(a)           printf("%d", a)
#define pl(a)           printf("%lld", a)
#define pn              printf("\n")
ll pow_mod(ll a, ll b)
{
    ll res = 1;
    while(b)
    {
        if(b & 1)
            res = (res * a) % MOD;
        a = (a * a) % MOD;
        b >>= 1;
    }
    return res;
}
int cnt[105];
int main()
{
    int t, i;
    si(t);
    rep(i, 1, t)
    {
        memset(cnt, 0, sizeof(cnt));
        int n, k, j;
        si(n);
        si(k);
        string str;
        rep(j, 1, n)
        {
            cin>>str;
            cnt[str.length()]++;
        }
        bool flag = true;
        rep(j, 1, 100)
        {
            if(cnt[j] % k)
            {
                flag = false;
                break;
            }
        }
        if(flag)
            cout<<"Possible\n";
        else
            cout<<"Not possible\n";
    }
    return 0;
}