网易游戏数据挖掘第二题HMM AC C++~只做出这一个题
/*
第三题,线下很OK,上线跪。第四题,弃疗了。
第一题不知道为啥,总是报段错误。。最后只能把一个while判断去掉,过了30%。关键是while这个地方有毛病,不知为啥。
和大佬交流了一下,说可能是这个&&没有截断。
vector<vector<int> > res;
for(int i=0;i<result.size();i++){
vector<int> tmp(2,0);
tmp[0]=result[i].first;tmp[1]=1;
while(i<result.size()-1&&result[i+1].first==result[i].first){
if(result[i+1].second!=result[i].second) tmp[1]+=1;
i++;
}
res.push_back(tmp);
if(i>=result.size()) break;
}
*/
//第二题如下。。
#include<iostream>
#include<vector>
#include<cmath>
#include<iomanip>
using namespace std;
int main(){
double init[4];
double cha[4][4];
double state[4][5];
for(int i=0;i<4;i++){
cin>>init[i];
}
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
cin>>cha[i][j];
}
}
for(int i=0;i<4;i++){
for(int j=0;j<5;j++){
cin>>state[i][j];
}
}
vector<int> to;
char t;
while(cin>>t){
if(t=='S'||t=='s') to.push_back(0);
else if(t=='A'||t=='a') to.push_back(1);
else if(t=='B'||t=='b') to.push_back(2);
else if(t=='C'||t=='c') to.push_back(3);
else if(t=='D'||t=='d') to.push_back(4);
}
double hu=0.0;
int flag=0;
vector<vector<double> > proba(2,vector<double>(4,0.0));
for(int i=0;i<to.size();i++){
for(int p=0;p<4;p++)
proba[flag][i]=0.0;
if(i==0){
for(int j=0;j<4;j++){
proba[flag][j]=init[j]*state[j][to[i]];
}
}else{
for(int j=0;j<4;j++){
for(int k=0;k<4;k++){
proba[flag][j]+=proba[1-flag][k]*cha[k][j];
}
proba[flag][j]*=state[j][to[i]];
}
}
flag=1-flag;
}
for(int ind=0;ind<4;ind++)
hu+=proba[1-flag][ind];
hu=log10(hu);
cout<<setiosflags(ios::fixed)<<setprecision(4)<<hu<<endl;
return 0;
}