⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2495479_ac_0ms_192k.c

📁 北大大牛代码 1240道题的原代码 超级权威
💻 C
字号:
#include <stdio.h>
#include <string.h>

int h, w;
int num, step, cas = 1;
int map[21][21], col[21], row[21];
int up, down, left, right;

int main()
{
	int i, j, max;
	int x, y;
	char dir[6];

	while(scanf("%d%d",&h,&w)==2&&w)
	{
		scanf("%d",&num);
		memset(map,0,sizeof(map));
		memset(col,0,sizeof(col));
		memset(row,0,sizeof(row));
		for(i = 0; i < num; i++)
			scanf("%d%d",&x,&y), map[x][y] = 1, row[x]++, col[y]++;
		while(scanf("%s",dir)==1&&strcmp(dir,"done")!=0)
		{
			max = -1;
			up = left = 0;right = w;down = h;
			scanf("%d",&step);
			switch(dir[0])
			{
			case 'd':
				for(i = left; i < right; i++)
					if(col[i]>max)
						max = col[i];
				if(step > down-up-max)
					step = down-up-max;
				while(step>0)
				{
					row[up] = 0;
					step--;
					for(i = left; i < right; i++)
					{
						j = up;
						while(map[j][i])
							j++;
						if(j==up)
							continue;
						map[up][i] = 0;
						map[j][i] = 1;
						row[j]++;
					}
					up++;
				}
				break;
			case 'u':
				for(i = left; i < right; i++)
					if(col[i]>max)
						max = col[i];
				if(step > down-up-max)
					step = down-up-max;
				while(step>0)
				{
					step--;
					down--;
					for(i = left; i < right; i++)
					{
						j = down;
						while(map[j][i])
							j--;
						if(j==down)
							continue;
						map[down][i] = 0;
						map[j][i] = 1;
						row[j]++;
					}
					row[down] = 0;
				}
				break;
			case 'l':
				for(i = up; i < down; i++)
					if(row[i]>max)
						max = row[i];
				if(step > right-left-max)
					step = right-left-max;
				while(step>0)
				{
					step--;
					right--;
					for(i = up; i < down; i++)
					{
						j = right;
						while(map[i][j])
							j--;
						if(j==right)
							continue;
						map[i][right] = 0;
						map[i][j] = 1;
						col[j]++;
					}
					col[right] = 0;
				}
				break;
			case 'r':
				for(i = up; i < down; i++)
					if(row[i]>max)
						max = row[i];
				if(step > right-left-max)
					step = right-left-max;
				while(step>0)
				{
					step--;
					col[left] = 0;
					for(i = up; i < down; i++)
					{
						j = left;
						while(map[i][j])
							j++;
						if(j==left)
							continue;
						map[i][left] = 0;
						map[i][j] = 1;
						col[j]++;
					}
					left++;
				}
			}
		}
		printf("Data set %d ends with boxes at locations ",cas++);
		for(i = up; i < down; i++)
			for(j = left; j < right; j++)
				if(map[i][j])
				{
					num--;
					printf("(%d,%d)",i,j);
					if(num)
						printf(" ");
					else
						printf(".\n");
				}
	}
	return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -