Pagini recente » Cod sursa (job #1665935) | Profil dnbmaniac | Cod sursa (job #3253225) | Cod sursa (job #2422640) | Cod sursa (job #2415212)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin ("perb.in");
ofstream cout ("perb.out");
int n, q, x, y;
char s[605];
int f[305][30], mx[305], dp[605][605];
int main() {
cin >> n >> q >> (s + 1);
for(int i = 1; i <= n; i++) {
for(int j = i + 1; j <= n; j++)
dp[i][j] = 1e9;
}
for(int l = 1; l <= n / 2; l++) {
for(int i = 1; i + l - 1 <= n; i++) {
memset(f, 0, sizeof(f));
memset(mx, 0, sizeof(mx));
int cnt = 1, sum = 0;
for(int j = i; j <= n; j++) {
int p = j - (cnt - 1) * l;
f[p][(s[j] - 'A')]++;
mx[p] = max(mx[p], f[p][(s[j] - 'A')]);
if(j >= i - l)
sum += cnt - mx[p];
if(j - i + 1 == cnt * l && j >= i + l) {
dp[i][j] = min(dp[i][j], sum);
cnt++;
sum = 0;
}
if(j == i + l - 1)
cnt++;
}
}
}
for(; q; q--) {
cin >> x >> y;
if(x > y)
swap(x, y);
cout << dp[x][y] << "\n";
}
return 0;
}