CF35B Warehouse


题目传送门

这道题其实挺有意思的,考你细心的程度

思路:

直接模拟两种操作就好了,用结构体存每一个箱子会比较简单一些。

每一条语句的详细意思可以看注释。

代码块部分:

结构体:

struct box{
	int x,y;//箱子的坐标 
	string id;//箱子的名字 
}a[10005];

文件读写:
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);//文件读写 

摆放箱子的操作:
if(opt==1){//操作 1 
	int xx,yy;
	cin>>xx>>yy>>name;//输入坐标及名称 
	if(s[xx][yy]==false){//格子为空,可直接放入 
		cnt++;//成功放入柜子 
		a[cnt].x=xx,a[cnt].y=yy,a[cnt].id=name;//赋值 
		s[xx][yy]=true;//格子已满 
	}else{//格子不为空,需要移动 
		if(yy==m){
			yy=1;
			xx++;
		}
		else yy++;//初始化 
		while(s[xx][yy]==true&&xx<=n){//找到合适的位置且没有越界 
			yy++;
			if(yy-1==m){
				yy=1;
				xx++;
			}
		}
		if(xx<=n){//找到了可放的格子 
			cnt++;//成功放入柜子 
			a[cnt].x=xx,a[cnt].y=yy,a[cnt].id=name;//赋值 
			s[xx][yy]=true;//格子已满 
		}
	}
}

取出箱子的操作:
else{//操作2 
	bool tf=true;//布尔值代表是否找到箱子(找到为 false ,否则为 true ) 
	cin>>name;//输入 
	for(int j=1;j<=cnt;j++){//循环查找 
		if(a[j].id==name){//找到箱子 
			cout<<a[j].x<<" "<<a[j].y<<endl;//输出 
			tf=false;//布尔值改变 
			s[a[j].x][a[j].y]=false;//此格子为空 
			a[j].x=-1,a[j].y=-1; 
			a[j].id="";//此箱子的各个数据设置为不可能再次查找到的值
			break;//退出循环 
		}
	}
	if(tf==true)puts("-1 -1");//未找到箱子 
}

完整代码:

#include<bits/stdc++.h>
using namespace std;
struct box{
	int x,y;//箱子的坐标 
	string id;//箱子的名字 
}a[10005];
bool s[50][50];// s[i][j] 表示柜子的第 i 行 j 列的格子( false 代表空, true 代表满,这里默认初始化每个格子都为空) 
int n,m,k,cnt=0;// cnt 为箱子已成功放入柜子的个数 
int main(){
	freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);//文件读写 
	cin>>n>>m>>k;//输入 
	for(int i=1;i<=k;i++){
		int opt;
		cin>>opt;//输入操作 
		string name;
		if(opt==1){//操作 1 
			int xx,yy;
			cin>>xx>>yy>>name;//输入坐标及名称 
			if(s[xx][yy]==false){//格子为空,可直接放入 
				cnt++;//成功放入柜子 
				a[cnt].x=xx,a[cnt].y=yy,a[cnt].id=name;//赋值 
				s[xx][yy]=true;//格子已满 
			}else{//格子不为空,需要移动 
				if(yy==m){
					yy=1;
					xx++;
				}
				else yy++;//初始化 
				while(s[xx][yy]==true&&xx<=n){//找到合适的位置且没有越界 
					yy++;
					if(yy-1==m){
						yy=1;
						xx++;
					}
				}
				if(xx<=n){//找到了可放的格子 
					cnt++;//成功放入柜子 
					a[cnt].x=xx,a[cnt].y=yy,a[cnt].id=name;//赋值 
					s[xx][yy]=true;//格子已满 
				}
			}
		}else{//操作2 
			bool tf=true;//布尔值代表是否找到箱子(找到为 false ,否则为 true ) 
			cin>>name;//输入 
			for(int j=1;j<=cnt;j++){//循环查找 
				if(a[j].id==name){//找到箱子 
					cout<<a[j].x<<" "<<a[j].y<<endl;//输出 
					tf=false;//布尔值改变 
					s[a[j].x][a[j].y]=false;//此格子为空 
					a[j].x=-1,a[j].y=-1; 
					a[j].id="";//此箱子的各个数据设置为不可能再次查找到的值
					break;//退出循环 
				}
			}
			if(tf==true)puts("-1 -1");//未找到箱子 
		}
	}
    return 0;
}

文章作者: alex_liu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 alex_liu !
  目录