mc2djwh @ 2024-10-26 23:03:40
丸辣!!!大jx160还有机会1=吗
#include <bits/stdc++.h>
using namespace std;
int main(){
int T;
cin>>T;
while(T--){
int n,m,k,x,y,d,ans=1;
cin>>n>>m>>k>>x>>y>>d;
char a[n][m];
bool vis[n][m]={};
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>a[i][j];
}
}
x--,y--;
vis[x][y]=1;
while(--k){
if(d==0){
if(y+1<m&&a[x][y+1]=='.'){
if(!vis[x][y+1]){
ans++;
vis[x][y+1]=1;
}
y++;
}else{
d=1;
}
}
if(d==1){
if(x+1<n&&a[x+1][y]=='.'){
if(!vis[x+1][y]){
ans++;
vis[x+1][y]=1;
}
x++;
}else{
d=2;
}
}
if(d==2){
if(y-1>=0&&a[x][y-1]=='.'){
if(!vis[x][y-1]){
ans++;
vis[x][y-1]=1;
}
y--;
}else{
d=3;
}
}
if(d==3){
if(x-1>=0&&a[x-1][y]=='.'){
if(!vis[x-1][y]){
ans++;
vis[x-1][y]=1;
}
x--;
}else{
d=0;
}
}
}
cout<<ans<<endl;
}
return 0;
}
by rqzhangzehao @ 2024-10-26 23:26:32
我和你也有过一样的经历 其实,你看一看你的d(方向),他的每一次向右转也算一次操作,而你的d在当d一开始等于0的时候没路可走,就会让d=1,然后你就会执行第2个if,但你没有让操作次数--,应改为else if
by rqzhangzehao @ 2024-10-26 23:28:47
改前:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
char s[1005][1005];
bool t[1005][1005];
ll cnt=1;
int main(){
ll T;
cin>>T;
while(T--){
ll n,m,k;
cin>>n>>m>>k;
ll x,y,d;
cin>>x>>y>>d;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>s[i][j];
t[i][j]=0;
}
}
t[x][y]=1;
k--;
while(true){
if(d==0){
if(y+1>m)d++;
else if(s[x][y+1]=='x')d++;
else{
if(!t[x][y+1])cnt++;
y++;
}
t[x][y]++;
}
if(d==1){
if(x+1>n)d++;
else if(s[x+1][y]=='x')d++;
else{
if(!t[x+1][y])cnt++;
x++;
}
t[x][y]++;
}
if(d==2){
if(y-1<=0)d++;
else if(s[x][y-1]=='x')d++;
else{
if(!t[x][y-1])cnt++;
y--;
}
t[x][y]++;
}
if(d==3){
if(x-1<=0)d=0;
else if(s[x-1][y]=='x')d=0;
else{
if(!t[x-1][y])cnt++;
x--;
}
t[x][y]++;
}
k--;
if(!k)break;
// cout<<cnt<<"("<<x<<","<<y<<")"<<endl;
}
cout<<cnt<<endl;
cnt=1;
}
}
改后:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
char s[1005][1005];
bool t[1005][1005];
ll cnt=1;
int main(){
ll T;
cin>>T;
while(T--){
ll n,m,k;
cin>>n>>m>>k;
ll x,y,d;
cin>>x>>y>>d;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>s[i][j];
t[i][j]=0;
}
}
t[x][y]=1;
while(k--){
if(d==0){
if(y+1>m)d++;
else if(s[x][y+1]=='x')d++;
else{
if(!t[x][y+1])cnt++;
y++;
}
t[x][y]++;
}
else if(d==1){
if(x+1>n)d++;
else if(s[x+1][y]=='x')d++;
else{
if(!t[x+1][y])cnt++;
x++;
}
t[x][y]++;
}
else if(d==2){
if(y-1<=0)d++;
else if(s[x][y-1]=='x')d++;
else{
if(!t[x][y-1])cnt++;
y--;
}
t[x][y]++;
}
else if(d==3){
if(x-1<=0)d=0;
else if(s[x-1][y]=='x')d=0;
else{
if(!t[x-1][y])cnt++;
x--;
}
t[x][y]++;
}
}
cout<<cnt<<endl;
cnt=1;
}
}
by mc2djwh @ 2024-10-26 23:58:18
@rqzhangzehao 哎,没救了,不过谢谢
by Zebraj @ 2024-10-27 08:57:57
@Dengjinheng2012 其实你不需要自己写自己的代码,按题意模拟即可
#include <bits/stdc++.h>
using namespace std;
int main(){
int T;
cin>>T;
while(T--){
int n,m,x,y,k,d,ans=0;
cin>>n>>m>>k>>x>>y>>d;
bool vis[n+1][m+1]={};
vis[x][y]=1;
char a[n+1][m+1];
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
while(k--){
int nowx,nowy;
if(d==0){
nowx=x,nowy=y+1;
}else if(d==1){
nowx=x+1,nowy=y;
}else if(d==2){
nowx=x,nowy=y-1;
}else{
nowx=x-1,nowy=y;
}
if(nowx>n||nowx<1||nowy>m||nowy<1||a[nowx][nowy]=='x'){
d=(d+1)%4;
continue;
}
x=nowx;
y=nowy;
if(vis[x][y]==0){
ans++;
}
vis[x][y]=1;
}
cout<<ans+1<<endl;
}
return 0;
}