Pagini recente » Cod sursa (job #2135507) | Cod sursa (job #2820759) | Cod sursa (job #1936553) | Cod sursa (job #260846) | Cod sursa (job #1050553)
#include <fstream>
#include <map>
#include <string>
using namespace std;
const int MAX_N = 16384;
std::map < string, int > M;
std::string text, aux, add;
int main()
{
ifstream cin( "substr.in" );
int N, K;
cin >> N >> K;
cin >> text;
cin.close();
for( int i = 0; i < N / 2; ++i )
text[i] = text[i] + text[N - i - 1] - ( text[N - i - 1] = text[i] );
int l = 1, r = N, ans = 0;
while( l <= r ){
int mid = ( l + r ) / 2;
bool ev = false;
aux.clear();
M.clear();
for( int i = 0; i < N; ++i ){
add.push_back( text[i] );
aux.insert( 0, add );
add.erase( 0, 1 );
if( i >= mid ) aux.erase( mid - 1, 1 );
std::map < string, int >::iterator it;
it = M.find( aux );
if( it != M.end() ){
if( ++it->second >= K ) ev = true;
}
else M.insert( pair< string, int >( aux, 1 ) );
}
if( ev ){
ans = mid;
l = ++mid;
}
else r = --mid;
}
ofstream cout( "substr.out" );
cout << ans;
cout.close();
return 0;
}