求答案
2025-09-18 13:15:23
发布于:福建
18阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
const long long N = 1e3 + 10;
long long g[N][N];
bool vis[N][N];
long long dx[] = {0 , 1 , 0 , -1};
long long dy[] = {1 , 0 , -1 , 0};
int main( ) {
int T;
cin >> T;
while (T--) {
long long n , m , k;
cin >> n >> m >> k;
long long x , y , d;
cin >> x >> y >> d;
for (int i = 1 ; i <= n ; i++) for (int j = 1 ; j <= m ; j++) cin >> g[i][j];
memset(vis , 0 , sizeof vis);
long long ans = 1;
vis[x][y] = 1;
while (k--) {
long long bx = x + dx[d];
long long by = y + dy[d];
if (bx < 1 || bx > n || by < 1 || by > m || g[bx][by] == 'x') {
d = (d + 1) % 4;
} else {
ans++;
vis[bx][by] = 1;
}
}
cout << ans << endl;
}
return 0;
}
为啥我这道题直接TLE了
全部评论 3
TLE这块/。
2025-10-05 来自 上海
0AC代码
2025-10-05 来自 上海
0#include <bits/stdc++.h> using namespace std; const long long N = 1e3 + 10; char g[N][N]; // <-----------------------------------你为什么开long long 存地图?? int vis[N][N]; long long dx[] = {0 , 1 , 0 , -1}; long long dy[] = {1 , 0 , -1 , 0}; int main( ) { int T; cin >> T; while (T--) { long long n , m , k; cin >> n >> m >> k; long long x , y , d; cin >> x >> y >> d; for (int i = 1 ; i <= n ; i++) for (int j = 1 ; j <= m ; j++) cin >> g[i][j]; memset(vis , 0 , sizeof (vis)); //------------------------------------------这里最好不要用ans直接算,经过的地方用vis存 vis[x][y] = 1; while (k--) { long long bx = x + dx[d]; long long by = y + dy[d]; if (bx < 1 || bx > n || (by < 1) || by > m || g[bx][by] == 'x') { d = (d + 1) % 4; } else { vis[bx][by]=1; x=bx,y=by; } } int ans=0; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ //------------------------------------像这样 if(vis[i][j]==1){ ans++; } } } cout<<ans<<endl; } return 0; }2025-10-05 来自 上海
0






有帮助,赞一个