ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Общий форум

I can!!!
Послано Martin 25 авг 2004 21:49
#include <stdlib.h>
#include <iostream>
#include <string>

using namespace std;

/**
* 1 ij 2 abc 3 def
* 4 gh 5 kl 6 mn
* 7 prs 8 tuv 9 wxy
* 0 oqz
*/

char* table = "22233344115566070778889990";
//abcdefghijklmnopqrstuvwxyz
int cnt;
string number;
string *dict;
int mas[100][100];

int vect[100];
bool was[100];
int vlen = 0;
int tries = 0;
int tmpval = 256;

void process(int num);
void solve();
int q(int leng,int deep);


int main()
{
while (true)
{
cin >> number;
if (number == "-1")
return 0;
cin >> cnt;
dict = new string[cnt];
memset(mas, 0, sizeof(mas));
for (int i=0; i<cnt; i++)
{
cin >> dict[i];
process(i);
}
solve();

delete[] dict;
}
return 0;
}

void process(int num)
{
string tmp = dict[num];
for (int i=0; i< dict[num].length(); i++)
{
tmp[i] = table[dict[num][i] - 'a'];
}
int i2 = tmp.length();
int i1 = number.find(tmp, 0);
while(i1 != -1)
{
mas[i1][i1+tmp.length()-1] = num+1;
i1 = number.find(tmp, i1+1);
}
}

void solve()
{
memset(vect, 0, sizeof(vect));
memset(was, 0, sizeof(was));
int a = number.length();
tmpval = 256;
vlen = q(a-1, 0);
if (vlen <= 101)
{
for (int i=0; i< vlen; i++)
cout << dict[vect[i]] << ' ';
}
else
{
cout << "No solution.";
}
cout << "\n";
}

int q(int leng, int deep)
{
int retval = 256;
int tmp = 0; // temporary value;
if (was[leng])
return 257;
if ((deep >= tmpval))
{
return 257;
}
if (mas[0][leng] != 0)
{
tmp = 0;
vect[0] = mas[0][leng]-1;
tmpval = deep;
was[leng] = true;
return 1;
}
for (int i=1; i<=leng; i++)
{
if (mas[i][leng] != 0)
{
int a = q(i-1, deep+1);
if (a < retval)
retval = a, tmp = i;
}
}
if (retval <= 101)
{
q(tmp-1, deep+1);
vect[retval] = mas[tmp][leng]-1;
was[leng] = true;
}
return retval+1;
}