Pagini recente »
Istoria paginii runda/2021-06-17-clasa-5-final-exam
|
Atașamentele paginii Clasament 2018-10-25-clasa-6-tema-6
|
Istoria paginii runda/c6_5/clasament
|
Istoria paginii runda/2018-03-01-clasa-5-tema-29
|
Cod sursă (job #144266)
Cod sursă (job
#144266)
#include <cstdio>
using namespace std;
#define maxn 1000010
#define sigma 30
int n, k;
char c, s[maxn];
double a[maxn], b[maxn];
double pc[sigma], pi[sigma], pb[sigma];
int main()
{
freopen("sms.in", "r", stdin);
freopen("sms.out", "w", stdout);
scanf("%d%d\n", &n, &k);
scanf("%s", s);
for(int i=0; i<k; ++i)
scanf("%lf%lf%lf", &pc[i], &pi[i], &pb[i]);
a[0]=a[1]=1;
for(int i=1; i<=n; ++i)
{
c=s[i-1]-'a';
//Observatie: a[i] este mereu 1
a[i+1] = (a[i] - pi[c] * a[i] - pb[c] * a[i-1]) / pc[c];
b[i+1] = (b[i] - pi[c] * (2 + b[i]) - pb[c] * (1 + b[i-1]) - pc[c]) / pc[c];
}
printf("%.8lf\n", -b[n+1]/a[n+1]);
return 0;
}