#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
const int N = 2e5;
int a[N], nextLetter[N][30];
long long inf = 1e11;
int main()
{
int n, minl = -1, minr = -1;
long double ans=1.000000;
cin >> n;
string s;
cin >> s;
for (int i = 0;i < s.size();++i)
{
a[i] = s[i] - 'a' + 1;
}
for (int i = 0;i< n;++i)
{
for (int j = 0;j < 30;++j)
{
nextLetter[i][j] = n;
}
}
nextLetter[n - 1][a[n - 1]] = n-1;
for (int i = n - 2;i >= 0;--i)
{
for (int j = 1;j <= 26;++j)
{
if (a[i] == j)
{
nextLetter[i][j] = i;
}
else
{
nextLetter[i][j] = nextLetter[i + 1][j];
}
}
}
for (int i = 0;i < n;++i)
{
sort(nextLetter[i], nextLetter[i] + 26);
}
//for (int i = 0;i < n;++i)
//{
// for (int j = 1;j<=26;++j)
// {
// cout << i << " " << j <<" "<<nextLetter[i][j] << endl;
// }
//}
for (int i = 0;i < n;++i)
{
for (int j = 1;j < 26;++j)
{
int dist = nextLetter[i][j] - i;
long double currans = (j+1)*1.0 / dist;
if (nextLetter[i][j] == n)
{
currans = j*1.0 / dist;
}
if (currans < ans)
{
ans = currans;
minl = i;
minr = nextLetter[i][j]-1;
}
if (nextLetter[i][j] == n)
{
break;
}
}
}
cout << minl+1 << " " << minr+1 << endl;
//cout << ans << endl;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |