60分代码求助
查看原帖
60分代码求助
832126
Huangjy88楼主2023/8/1 16:04
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
int cnt;
char mp[205][205];
int fx[5]={-1,0,0,1},fy[5]={0,1,-1,0};
bool vis[205][205];
string s[105];
int len[25];
struct node{
	int x,y;
};
deque<node>snake[25];
struct Snake{
	int id,len;
	bool operator < (Snake p) const{
		if(len!=p.len) return len>p.len;
		return id<p.id; 
	}
}a[25];
void print_map(){
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cout<<mp[i][j];
		}
		cout<<endl;
	}
}
void input_map(){//地图 
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			cin>>mp[i][j];
}
void dfs(int x,int y){
	a[cnt].len++;
	vis[x][y]=1;
	snake[cnt].push_back({x,y});
	for(int i=0;i<4;i++){
		int nx=x+fx[i],ny=y+fy[i];
		if(nx>0&&ny>0&&nx<=n&&ny<=m&&mp[nx][ny]=='#'&&!vis[nx][ny])
			dfs(nx,ny);
	}
}
void find_snake(){
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			if(mp[i][j]=='@'){a[++cnt].id=cnt;dfs(i,j);}
}
void input_op(){
	for(int i=1;i<=cnt;i++) cin>>s[i];
}
void kill(int id){
	a[id].len=0;
	while(!snake[id].empty()){
		node tmp=snake[id].front();
		snake[id].pop_front();
		mp[tmp.x][tmp.y]='&';
	}
}
void move(int id,int k){
	char op=s[id][k];
	node head=snake[id].front(),tail=snake[id].back();
	int x=head.x,y=head.y;
	if(op=='W') x--;
	if(op=='S') x++;
	if(op=='A') y--;
	if(op=='D') y++;
	if(x<1 || x>n || y<1 || y>m){
		kill(id);return;
	}
	if(mp[x][y]=='@' || mp[x][y]=='#'){
		kill(id);return;
	}
	if(mp[x][y]=='&'){
		snake[id].push_front({x,y});
		mp[x][y]='@';
		mp[head.x][head.y]='#';
		a[id].len++;
	}
	if(mp[x][y]=='.'){
		snake[id].push_front({x,y});
		snake[id].pop_back();
		mp[x][y]='@';
		mp[tail.x][tail.y]='.';
		mp[head.x][head.y]='#';
	}
}
void work(){
	for(int i=0;i<s[1].size();i++){
		for(int j=1;j<=cnt;j++){
			if(!a[j].len) continue;
			move(j,i);
		}
//		cout<<i+1<<endl;
//		print_map();
	} 
}
void out_put(){
	sort(a+1,a+cnt+1);
	for(int i=1;i<=cnt;i++) cout<<a[i].len<<' '<<a[i].id<<endl;
	int num=0;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			if(mp[i][j]=='&') num++;
	cout<<num;
}
int main(){
	input_map();
	find_snake();
	input_op();
	work();
	out_put();
	return 0;
}

求修改意见或数据(测试点)

2023/8/1 16:04
加载中...