求回复

P1913 L国的战斗之伞兵

```c #include <bits/stdc++.h> using namespace std; int main(){ int n,m; cin >> n >> m; char a[n+1][m+1]; for(int i = 1;i <= n;++i){ for(int j = 1;j <= m;++j){ cin >> a[i][j]; } } int s = n * n; int cnt = 0; for(int i = 1;i <= n;++i){ for(int j = 1;j <= m;++j){ int x = i,y = j; if(a[i][j] == 'o'){ cnt++; }else{ int b = 0; bool f = false; while(1){ if(a[x][y] == 'u'){ x -= 1; }else if(a[x][y] == 'd'){ x += 1; }else if(a[x][y] == 'l'){ y -= 1; }else if(a[x][y] == 'r'){ y += 1; } if(a[x][y] == 'o'){ cnt++; break; } b++; if(b == s){ break; } } } } } cout << cnt; return 0; } ```
by lucas_777 @ 2023-06-19 22:07:35


@[lucas_777](/user/728949) 你这必然TLE呀
by too_simple @ 2023-06-20 06:34:03


是不是问题应该出在不一定经过一堆if判断后又回到无风点才可以 ~~(本蒟蒻觉得大佬你的思路应该有点问题)~~
by poppingW @ 2023-06-20 09:32:54


栓Q
by lucas_777 @ 2023-06-20 17:55:21


@[lucas_777](/user/728949) 可以记录判断中得到的点,要么全都可以,要么全都不可以
by wyhm @ 2023-06-20 22:20:50


代码改完就过了 ```cpp #include <bits/stdc++.h> using namespace std; int p[1501][1501],c[1501][1501],qx[2000001],qy[2000001],ans,n,m; char a[1501][1501]; int main(){ cin >> n >> m; for(int i = 1;i <= n;++i){ for(int j=1;j<=m;j++){ cin>>a[i][j]; } } for(int i = 1;i <= n;++i){ for(int j = 1;j <= m;++j){ int x = i,y = j,cnt=0,add=0; while(1){ c[x][y]++; qx[++cnt]=x; qy[cnt]=y; if(a[x][y] == 'o'||p[x][y]==1){ add=1; } else if(x==0||y==0||x>n||y>m||p[x][y]==-1||c[x][y]>2){ add=-1; } if(add!=0){ for(int k=1;k<=cnt;k++){ p[qx[k]][qy[k]]=add; c[qx[k]][qy[k]]+=add; } ans+=(add==1); break; } if(a[x][y] == 'u'){ x -= 1; }else if(a[x][y] == 'd'){ x += 1; }else if(a[x][y] == 'l'){ y -= 1; }else if(a[x][y] == 'r'){ y += 1; } } } } cout << ans; return 0; } ```
by wyhm @ 2023-06-20 22:21:33


谢谢
by lucas_777 @ 2023-06-21 16:19:21


|