power oj 2914: 教Mannix小鸽鸽认数字

    技术2025-04-17  7

    power oj 2914: 教Mannix小鸽鸽认数字 在N×M的网格中,存在一个大于等于0且小于等于3的数字,因为老师的要求,它被方方正正的由宽度为1的’X’符号写在方格纸中,没有写字的区域默认符号为’.’,现在Mannix小鸽鸽想知道你写了一个什么数字? Input 第一行,两个整数N,M表示区域的大小,(5≤N,M≤1000)接下来N行,每行M个字符,表示这个方格纸中的数字(数字的高度大于等于5)和没有写字的区域。 保证答案具有唯一性。 Output 输出一个大于等于0且小于等于3的整数,表示这个数字。

    #include <iostream> #include <cstdio> #include <algorithm> #include <cmath> #include <map> #include <cstring> #include <string> #include <vector> #define INF 0x3f3f3f3f const int N = 1e4+10; using namespace std; typedef long long ll; const ll mod=1000000007; bool flag=false; char r[N][N]; int main() { int m,n; cin>>n>>m; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { cin>>r[i][j]; } } int l1=INF,l2=INF; int r1=0,r2=0; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { //cout<<r[i][j]; if (r[i][j]=='X'){ l1=min(l1,i);l2=min(l2,j); r1=max(r1,i);r2=max(r2,j);//找到数字的边界 } } //cout<<endl } int p=0; for (int i = l1; i <= r1; ++i) { if (r[i][l2]!='X'){ p+=1; break;//第一列有.的话就可判断是2或者3 } } for (int i = l1; i <= r1; ++i) { if (r[i][r2]!='X'){ p+=1; break;//最后一列有.的话就可以判断是2 } } //cout<<l1<<' '<<l2<<' '<<r1<<' '<<r2<<endl; //cout<<p<<endl; if (p==2){ cout<<2<<endl; } else if (p==1) { cout<<3<<endl; } else{ int mid=(l1+r1)>>1; for (int i = l2; i <= r2; ++i) { if (r[mid][i]=='.') flag=true;//中间有.就是0没有就是1 } if (flag) cout<<0<<endl; else cout<<1<<endl; } return 0; }

    2914: 教Mannix小鸽鸽认数字

    Processed: 0.011, SQL: 9