Cod sursa(job #797433)

Utilizator romircea2010FMI Trifan Mircea Mihai romircea2010 Data 14 octombrie 2012 01:19:04
Problema Patrate2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>

using namespace std;

int n, nv, uz[15];
char c[15], s[15];
struct vectoru
{
    int nr;
    char ch;
};
vectoru v[30];

inline void Read()
{
    ifstream f("anag.in");
    f>>c;
    f.close();
}

inline void back(int k)
{
    if (k == n)
        printf("%s\n", s);
    else
    {
        for(int i=1; i<=nv; i++)
        {
            if (uz[i] < v[i].nr)
            {
                uz[i]++;
                s[k] = v[i].ch;
                back(k+1);
                uz[i]--;
            }
        }
    }
}

inline void Solve()
{
    n = strlen(c);
    freopen("anag.out", "w", stdout);
    int i, k;
    for(i=0; i<n; i++)
    {
        v[c[i]-'a'+1].ch = c[i];
        v[c[i]-'a'+1].nr++;
    }
    k=0;
    for(i=1; i<=26; i++)
        if (v[i].nr == 0)
            k++;
        else
            v[i-k] = v[i];
    nv = 26-k;
//    for (i=1; i<=nv; i++)
//        cout<<v[i].ch<<" "<<v[i].nr<<"\n";
//    cout<<nv;
    back(0);
}

int main()
{
    Read();
    Solve();
    return 0;
}