WA求助,自己觉得思路真的没问题

P1506 拯救oibh总部

就是想的把最边上的一圈检测一遍,有0的地方就往里边灌水(改为*),最后统计数组0的数量这样子的思路
by yr是yr @ 2023-11-15 17:56:20


然后自己也构造了很多数据测试了都没问题,但是交上去就全都WA
by yr是yr @ 2023-11-15 17:58:06


@[yr是yr](/user/562647) 你 IO 写炸了,可能是系统差异导致的,改成用 ```cin``` 读入就过了 ```cpp #include <stdio.h> #include <iostream> using std::cin; int x, y; int map[505][505]; char ch; int answer = 0; void check_safe(int a,int b) { map[a][b] = 1; //深搜 if(map[a-1][b] == 0) { check_safe(a-1,b); } if(map[a][b-1] == 0) { check_safe(a,b-1); } if(map[a+1][b] == 0) { check_safe(a+1,b); } if(map[a][b+1] == 0) { check_safe(a,b+1); } return; } void get_answer(int a,int b) { if((a == 1 || a == x || b == 1 || b == y) && map[a][b] == 0) check_safe(a,b); return; } int main() { cin>>x>>y; for(int i = 0;i <= y+1;i++) { map[0][i] = 1; map[x + 1][i] = 1; } for(int i = 0;i <= x+1;i++) { map[i][0] = 1; map[i][y + 1] = 1; } for(int i = 1;i <= x;i++) { for(int j = 1;j <= y;j++) { cin>>ch; if(ch == '0') map[i][j] = 0; if(ch == '*') map[i][j] = 1; if(ch == '\n') j--; } } for(int i = 1;i <= x;i++) { get_answer(i, 1); get_answer(i, y); } for(int i = 1;i <= y;i++) { get_answer(1, i); get_answer(x, i); } for(int i = 1;i <= x;i++) { for(int j = 1;j <= y;j++) { if(map[i][j] == 0) answer++; } } printf("%d",answer); return 0; } ```
by unsigned_short_int @ 2023-11-15 18:29:56


@[int_unsigned_short](/user/427154)
by yr是yr @ 2023-11-15 19:54:01


``` ``` 为什么会炸啊佬,就是说我了解的printf和scanf好像在数据大的时候运行会比cin和cout快,具体不知道我这个炸在哪儿了,求详解
by yr是yr @ 2023-11-15 19:57:55


@[yr是yr](/user/562647) 数据可能是在 windows 下造的,这样换行符是 `\r\n`,也有可能是行末存在空格。
by unsigned_short_int @ 2023-11-15 20:06:31


所以说,其实不能算是 `scanf` 的问题
by unsigned_short_int @ 2023-11-15 20:07:12


@[yr是yr](/user/562647) AC code:: ```cpp #include<bits/stdc++.h> using namespace std; int n,m,s=0,ans=0; int dx[4]={1,-1,0,0}; int dy[4]={0,0,1,-1}; int water[1024][1024]; void dfs(int x,int y){ if(x<0||y<0||x>n+1||y>m+1||water[x][y]){ return ; } water[x][y]=-1; for(int i=0;i<4;i++){ dfs(x+dx[i],y+dy[i]); } } int main(){ cin>>n>>m; char ts; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>ts; if(ts=='*')water[i][j]=1; else water[i][j]=0; } } dfs(0,0); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(!water[i][j]){ ans++; } } } cout<<ans; return 0; } ```
by Zmin_Juipter @ 2023-11-25 20:35:51


|