BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #92677同步于 2017/3/29
ACM_ICPC机器人发帖

【问题】北邮OJ, Saber's Board,为什么我总是答案错误?

lxclxc
2017/3/29镜像同步0 回复
题目链接:http://10.105.242.81/problem/contest/642/problem/A/ 题目图片: 我的思路:题目要求应该是在这个地图中找合适的'O'的个数,使它到'X'的步数不超过k步,所以我就在限制条件下进行深搜,感觉正确啊,难道还有什么其他的测试用例被忽略了? 我的代码: #define lxc #include<stack> #include<stdio.h> #include<iostream> #include<limits.h> #include<string.h> #include<queue> #include<string> #include<stdlib.h> #include<algorithm> #include<math.h> using namespace std; char map1[22][22]; bool visited[22][22]; int n,m; bool isOk(int row, int clo, int k) { if (row<1||clo<1||row>n||clo>m) return true; //cout<<"isok:"<<row<<" " <<clo<<" "<<map1[row][clo]<<" "<<k<<endl; if (k==0) return true; if (map1[row][clo] == 'X'){ // cout<<"X"<<endl; return false; } if (visited[row][clo]) { return true; } visited[row][clo] = true; return (isOk(row-1,clo,k-1)&&isOk(row+1,clo,k-1)&&isOk(row,clo-1,k-1)&&isOk(row,clo+1,k-1)); } int main(){ #ifdef lxc freopen("in.txt","r", stdin); #endif // lxc int T; int k; scanf("%d", &T); while (T--) { scanf("%d%d%d",&n,&m,&k); for (int i=1; i<=n; i++) { scanf("%s",map1[i]+1); } int top = k, down = n-k+1; int left = k, right = m-k+1; //cout<<left<<" "<<right<<" "<<top<<" "<<down<<endl; int sum = 0; for (int i=top; i<=down; i++) { for (int j= left; j<=right; j++) { memset(visited, 0, sizeof(visited)); // clear to false; if (map1[i][j] == 'O' && isOk(i,j, k)) { cout<<"the suitable position:"<<i<<" "<<j<<endl; sum++; } } } printf("%d\n",sum); } #ifdef lxc fclose(stdin); #endif // lxc return 0; } 还望大神们赐教[ema1]
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。