RT.求优化精度(尽可能不要提高时间复杂度)
//第一行n,后面若干行表示地图(列数不限)
//x表示雷 .表示空地,0~9表示数字
//由于算法特殊,所以准确性不高,建议使用@yangbaich的算法
#include <bits/stdc++.h>
using namespace std;
char s[105][105];
double gl[105][105];
int n,flag[105][105];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
cin>>s[i];
}
for(int i=1;i<=n;i++){
int len=strlen(s[i]);
for(int j=0;j<len;j++){
gl[i][j]=1;
}
}
for(int i=1;i<=n;i++){
int len=strlen(s[i]);
for(int j=0;j<len;j++){
if(s[i][j]>='0'&&s[i][j]<='9'){
int num=s[i][j]-'0',kd=0;
for(int k=-1;k<=1;k++){
for(int l=-1;l<=1;l++){
if(i+k<0||j+l<0||i+k>n||j+l>=len){
continue;
}
if(s[i+k][j+l]=='x'){
num--;
}
if(s[i+k][j+l]=='.'){
kd++;
}
}
}
for(int k=-1;k<=1;k++){
for(int l=-1;l<=1;l++){
if(i+k<0||j+l<0||i+k>n||j+l>=len){
continue;
}
if(s[i+k][j+l]=='.'){
gl[i+k][j+l]*=1-(1.0*num/kd);
}
}
}
}
}
}
for(int i=1;i<=n;i++){
int len=strlen(s[i]);
for(int j=0;j<len;j++){
if(s[i][j]>='0'&&s[i][j]<='9'){
for(int k=-1;k<=1;k++){
for(int l=-1;l<=1;l++){
if(i+k<0||j+l<0||i+k>n||j+l>=len){
continue;
}
if(s[i+k][j+l]=='.'&&!flag[i+k][j+l]){
cout<<"no mine probability:"<<i+k<<" "<<j+l+1<<" "<<gl[i+k][j+l]<<endl;
flag[i+k][j+l]=1;
}
}
}
}
}
}
return 0;
}