#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;}