Сегодня пишу тестовое задание на стажировку в Яндекс. Пока не очень хорошо всё идёт. Задачи у них вот такие: http://narod.ru/disk/33108589001/task.zip.html .
Вот такие фотки:
Решать как знаю. Вот так вот: [суперссылка] Но это не сильно радует. В общем-то, мучаюсь (( А остался день :)
Решение второй, которое не проходит по времени:
Вот такие фотки:
Решать как знаю. Вот так вот: [суперссылка] Но это не сильно радует. В общем-то, мучаюсь (( А остался день :)
Решение второй, которое не проходит по времени:
#include <iostream>
#include <string>
#define inf ( (unsigned short)(-1) )
usingnamespace std;
const int MAX_SIZE = 10010;
unsigned short a[MAX_SIZE][MAX_SIZE];
unsigned short v[MAX_SIZE];
unsigned short intersection[MAX_SIZE];
voidGetMatrixOfLargestCommonSubstring(string s, string t)
{
for (int j = 0; j <=s.length(); j++)
{
a[0][j] = 0;
}
for (int i = 0; i <= t.length(); i++)
{
a[i][0] = 0;
}
for (int i = 1; i <= t.length(); i++)
{
for (int j = 1; j <= s.length(); j++)
{
if (t[i-1] == s[j-1])
{
a[i][j] = a[i-1][j-1]+1;
}
else
{
a[i][j] = 0;
}
}
}
}
void GetVectorOfLargestCommonSubstring(int n, int m)
{
for (int i = 0; i <= n; i++)
{
unsigned short maxVal = 0;
for (int j = 0; j <= m; j++)
{
maxVal = max(maxVal, a[j][i]);
}
v[i] = maxVal;
}
}
void Intersect(int len)
{
for (int i = 0; i <= len; i++)
{
intersection[i] = min(v[i], intersection[i]);
}
}
void FillIntersectionArray()
{
for (int i = 0; i < MAX_SIZE; i++)
{
intersection[i] = inf;
}
}
int main()
{
int n;
cin >> n;
string s, g;
cin >> s;
FillIntersectionArray();
while (--n)
{
cin >> g;
GetMatrixOfLargestCommonSubstring(s, g);
GetVectorOfLargestCommonSubstring(s.length(), g.length());
Intersect(s.length());
}
unsigned short maxNum = 1;
for (int i = 1; i <= s.length(); i++)
{
if (intersection[i] > intersection[maxNum])
{
maxNum = i;
}
}
string ans(s, maxNum-intersection[maxNum], intersection[maxNum]);
cout << ans << endl;
}
#include <string>
#define inf ( (unsigned short)(-1) )
usingnamespace std;
const int MAX_SIZE = 10010;
unsigned short a[MAX_SIZE][MAX_SIZE];
unsigned short v[MAX_SIZE];
unsigned short intersection[MAX_SIZE];
voidGetMatrixOfLargestCommonSubstring(string s, string t)
{
for (int j = 0; j <=s.length(); j++)
{
a[0][j] = 0;
}
for (int i = 0; i <= t.length(); i++)
{
a[i][0] = 0;
}
for (int i = 1; i <= t.length(); i++)
{
for (int j = 1; j <= s.length(); j++)
{
if (t[i-1] == s[j-1])
{
a[i][j] = a[i-1][j-1]+1;
}
else
{
a[i][j] = 0;
}
}
}
}
void GetVectorOfLargestCommonSubstring(int n, int m)
{
for (int i = 0; i <= n; i++)
{
unsigned short maxVal = 0;
for (int j = 0; j <= m; j++)
{
maxVal = max(maxVal, a[j][i]);
}
v[i] = maxVal;
}
}
void Intersect(int len)
{
for (int i = 0; i <= len; i++)
{
intersection[i] = min(v[i], intersection[i]);
}
}
void FillIntersectionArray()
{
for (int i = 0; i < MAX_SIZE; i++)
{
intersection[i] = inf;
}
}
int main()
{
int n;
cin >> n;
string s, g;
cin >> s;
FillIntersectionArray();
while (--n)
{
cin >> g;
GetMatrixOfLargestCommonSubstring(s, g);
GetVectorOfLargestCommonSubstring(s.length(), g.length());
Intersect(s.length());
}
unsigned short maxNum = 1;
for (int i = 1; i <= s.length(); i++)
{
if (intersection[i] > intersection[maxNum])
{
maxNum = i;
}
}
string ans(s, maxNum-intersection[maxNum], intersection[maxNum]);
cout << ans << endl;
}


Яндекс офигел-офигел!
ОтветитьУдалитьНапишешь всё :*
И убери в настройках капчу... У Валика вот здесь - http://f-low010.blogspot.com/2012/06/blog-post_11.html - написано, как это сделать.
ОтветитьУдалитьOkey :)
УдалитьИсправляю себя: как у Валика вот здесь
Удалить(сразу не попробовала html))
Убрал капчу, или нет?
ОтветитьУдалитьУррраааа, убрал! )
ОтветитьУдалить