WA 40 无TLE 求debug
查看原帖
WA 40 无TLE 求debug
855636
CreamStarlight楼主2024/8/10 15:58

此为本人尝试后写出来的代码,然而看上去没错实际上WA40分,不知该怎么搞……

(优化不太好,抱歉了)

#include<bits/stdc++.h>
using namespace std;
int height,width,run; //高;宽;指令数 
char mp[51][51]; //地图 
string command[1002]; //好吧事实上我定义这个压根没用,光占空间( 
typedef pair<int,int> pii;
set<pii> lol1,lol2; //可能的距离点 
int main(){
	cin>>height>>width;
	for(int i=0;i<height;i++){
		for(int j=0;j<width;j++){
			cin>>mp[j][i];
			if(mp[j][i]=='*'){
				lol1.insert(make_pair(j,i)); //初始距离点 
				mp[j][i]='.';
			}
		}
	}
	cin>>run;
	for(int i=0;i<run;i++){
		cin>>command[i];
		if(command[i]=="NORTH"){
			if(lol1.empty()){
				for(pii t:lol2){
					int x=t.first;//获取距离点x 
					int y=t.second;//获取距离点y 
					for(int k=y-1;k>=0;k--){//沿着这条路开 
						if(mp[x][k]=='X')break;//再开就撞车了!
						lol1.insert(make_pair(x,k));//记录可能的距离点 
					}
				}
				lol2.clear();
			}else{
				for(pii t:lol1){
					int x=t.first;
					int y=t.second;
					for(int k=y-1;k>=0;k--){
						if(mp[x][k]=='X')break;
						lol2.insert(make_pair(x,k));
					}
				}
				lol1.clear();
			}
		}else if(command[i]=="SOUTH"){
			if(lol1.empty()){
				for(pii t:lol2){
					int x=t.first;
					int y=t.second;
					for(int k=y+1;k<height;k++){
						if(mp[x][k]=='X')break;
						lol1.insert(make_pair(x,k));
					}
				}
				lol2.clear();
			}else{
				for(pii t:lol1){
					int x=t.first;
					int y=t.second;
					for(int k=y+1;k<height;k++){
						if(mp[x][k]=='X')break;
						lol2.insert(make_pair(x,k));
					}
				}
				lol1.clear();
			}
		}else if(command[i]=="WEST"){
			if(lol1.empty()){
				for(pii t:lol2){
					int x=t.first;
					int y=t.second;
					for(int k=x-1;k>=0;k--){
						if(mp[k][y]=='X')break;
						lol1.insert(make_pair(k,y));
					}
				}
				lol2.clear();
			}else{
				for(pii t:lol1){
					int x=t.first;
					int y=t.second;
					for(int k=x-1;k>=0;k--){
						if(mp[k][y]=='X')break;
						lol2.insert(make_pair(k,y));
					}
				}
				lol1.clear();
			}
		}else if(command[i]=="EAST"){
			if(lol1.empty()){
				for(pii t:lol2){
					int x=t.first;
					int y=t.second;
					for(int k=x+1;k<width;k++){
						if(mp[k][y]=='X')break; 
						lol1.insert(make_pair(k,y));
					}
				}
				lol2.clear();
			}else{
				for(pii t:lol1){
					int x=t.first;
					int y=t.second;
					for(int k=x-1;k<width;k++){
						if(mp[k][y]=='X')break;
						lol2.insert(make_pair(k,y));
					}
				}
				lol1.clear();
			}
		}
	}
	if(lol1.empty()){
		for(pii t:lol2){
			int x=t.first;
			int y=t.second;
			mp[x][y]='*'; //标记最终可能的距离点 
		}
	}else{
		for(pii t:lol1){
			int x=t.first;
			int y=t.second;
			mp[x][y]='*';
		}
	}
	for(int i=0;i<height;i++){
		for(int j=0;j<width;j++){
			cout<<mp[j][i]; //将地图遍历输出 
		}
		cout<<endl;
	}
	return 0;
}
2024/8/10 15:58
加载中...