#include<iostream>#include<vector>#include<iomanip>usingnamespace std;intmain(){int n,m,k;while(cin >> n >> m >> k){//由于这里的坐标是从(1,1)开始的,所以将数组的大小定义为n+1*m+1vector<vector<int>>Lawn((n+1),vector<int>(m+1));vector<vector<double>>Ret((n+1),vector<double>(m+1));//将Lwan中的种上蘑菇for(size_t i =0; i < k;++i){int x,y;cin >> x >> y;Lawn[x][y]=1;}//将开始位置初始化为1.0Ret[1][1]=1.0;//开始一层一层的看Lawn中的路线中的蘑菇for(size_t i =1; i < n+1;++i){for(size_t j =1; j < m+1;++j){//如果着块草地有蘑菇,无论怎么走都是0if(1== Lawn[i][j]){Ret[i][j]=0;continue;}if(!(1== i &&1== j)){//如果是边界,那几率就是1,因为只有一条路Ret[i][j]= Ret[i-1][j]*(j == m ?1.0:0.5)+ Ret[i][j-1]*(i == n ?1.0:0.5);}}}cout << fixed <<setprecision(2)<< Ret[n][m]<< endl;}return0;}