Pagini recente » Cod sursa (job #2833187) | Cod sursa (job #349788) | Cod sursa (job #2511563) | Cod sursa (job #228101) | Cod sursa (job #586841)
Cod sursa(job #586841)
#include <fstream>
#include <string>
#include <vector>
using namespace std;
const char iname[] = "perb.in";
const char oname[] = "perb.out";
ifstream f(iname);
ofstream g(oname);
inline int cast(const char &x) {
if (x == 'A')
return 0;
if (x == 'C')
return 1;
if (x == 'G')
return 2;
return 3;
}
int main() {
int N, M; f >> N >> M;
string S; f >> S;
vector< vector<int> > dp(N, vector<int>(N));
for (int i = 0; i < N; ++i)
for (int j = i + 1; j < N; ++j)
dp[i][j] = j - i;
for (int i = 0; i < N; ++i)
for (int j = 1; j < N; ++j) {
if (i + 2 * j > N)
break;
vector< vector<int> > apparitions(j, vector<int>(4, 0));
vector<int> most(j, 0);
for (int k = 1; i + k * j <= N; ++k) {
int answer = 0;
for (int p = 0; p < j; ++p) {
int castcharacter = cast(S[i + (k - 1) * j + p]);
++apparitions[p][castcharacter];
most[p] = max(most[p], apparitions[p][castcharacter]);
answer += k - most[p];
}
if (k > 1)
dp[i][i + k * j - 1] = answer;
}
}
for (int i = 0; i < M; ++i) {
int x, y; f >> x >> y;
g << dp[x - 1][y - 1] << "\n";
}
}