[a]土豆星人的难题.cpp

来自「某校acm月赛题目以及源代码」· C++ 代码 · 共 104 行

CPP
104
字号
#include <stdio.h>
#include <string.h>

int main()
{
	const int MAX = 10;
	typedef int matrix[MAX][MAX];
	char query[3][10] = {"rotate", "roll", "add"};
	
	matrix in, tmp;
	int t, m, i, j, ncase;
	
	//freopen("A.in", "r", stdin);
	//freopen("A.out", "w", stdout);
	scanf("%d", &ncase);
	while(ncase--)
	{
		scanf("%d", &m);
		for(i = 0; i < m; i++)
			for(j = 0; j < m; j++)
				scanf("%d", &in[i][j]);
		
		scanf("%d", &t);
		while(t--)
		{
			char tmp_query[10];
			scanf("%s", tmp_query);
			for(i = 0; i < 3; i++)
				if(!strcmp(tmp_query, query[i]))
					break;
					
			if(i == 0)
			{
				int degree;
				int k, h;
				scanf("%d", &degree);
	
				while(degree)
				{
					
					degree -= 90;
					for(k = 0; k < m; k++)
						for(h = 0; h < m; h++)
							tmp[k][h] = in[m - h - 1][k];
					
					for(k = 0; k < m; k++)
						for(h = 0; h < m; h++)
						in[h][k] = tmp[h][k];
				}
			}
			
			else if(i == 1)
			{
				int method;
				int k, h;
				
				scanf("%s", tmp_query);
				scanf("%d", &method);
				if(method)
				{
					for(k = 0; k < m; k++)
						for(h = 0; h < (m >> 1); h++)
						{
							in[k][h] = in[k][h] ^ in[k][m - h - 1];
							in[k][m - h - 1] = in[k][h] ^ in[k][m - h - 1];
							in[k][h] = in[k][h] ^ in[k][m - h - 1];
						}
				}
				else
				{
					for(k = 0; k < (m >> 1); k++)
						for(h = 0; h < m; h++)
						{
							in[k][h] = in[k][h] ^ in[m - k - 1][h];
							in[m - k - 1][h] = in[k][h] ^ in[m - k - 1][h];
							in[k][h] = in[k][h] ^ in[m - k - 1][h];
						}
				}
			}
			
			else
			{
				int tmp_num;
				int k, h;
				
				for(k = 0; k < m; k++)
					for(h = 0; h < m; h++)
					{
						scanf("%d", &tmp_num);
						in[k][h] += tmp_num;
					}
			}	
		}
		
		for(i = 0; i < m; i++)
		{
			for(j = 0; j < m - 1; j++)
				printf("%d ", in[i][j]);
			printf("%d\n", in[i][j]);
		}
	}
	return 0;
}

⌨️ 快捷键说明

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