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

📄 3106.txt

📁 北大ACM题目例程 详细的解答过程 程序实现 算法分析
💻 TXT
字号:
Source

Problem Id:3106  User Id:fzk 
Memory:248K  Time:211MS
Language:C++  Result:Accepted

Source 

#include <stdio.h>

static char str[100010];
static char input[310][310], ans[310][310];
static int n, m;

static int doit( int s ) {
	int i = s/1000, j = s%1000, a = i, b = j;
	int nn = n;
	int mm = m, t;
	
	for( int k=0; str[k]; k++ ) {
		switch( str[k] ){
		case '1':
			a = j; b = i;
			t = nn; nn = mm; mm = t; 
			break;
		case '2':
			a = nn-j; b = mm-i; 
			t = nn; nn = mm; mm = t; 
			break;
		case 'H':
			a = mm-i; b = j; break;
		case 'V':
			a = i; b = nn-j; break;
		case 'B': case 'Y':
			a = mm-i; b = nn-j; break;
		case 'A': case 'Z':
			a = j; b = mm-i;
			t = nn; nn = mm; mm = t; 
			break;
		case 'C': case 'X':
			a = nn-j; b = i; 
			t = nn; nn = mm; mm = t; 
			break;
		}
		i = a;
		j = b;
	}
	return i*1000+j;
}

int main( ){
	int i, j;
	scanf( "%d%d", &m, &n );

	for( i=0; i<m; i++ )
		scanf( "%s", input[i] );

	getchar( );
	gets( str );
	
	int *x=new int[3], *y = new int[3];
	int t;
	n--; m--;
	t = doit( 0*1000+0 );
	x[0] = t/1000; y[0] = t%1000;
	
	t = doit( m*1000+0 );
	x[1] = t/1000; y[1] = t%1000;
	
	t = doit( 0*1000+n );
	x[2] = t/1000; y[2] = t%1000;
	n++;m++;

	int a = x[0], b = y[0], aa, bb;
	int da = ((x[1]==x[0]) ? 0 : ((x[1]>x[0])?1:-1) ),
		db = ((y[1]==y[0]) ? 0 : ((y[1]>y[0])?1:-1) ),
		da1= ((x[2]==x[0]) ? 0 : ((x[2]>x[0])?1:-1) ),
		db1= ((y[2]==y[0]) ? 0 : ((y[2]>y[0])?1:-1) );

	int nn = 0, mm = 0;

	for( i=0; i<m; i++ ) {
		aa = a; bb = b;
		for( j=0; j<n; j++ ) {
			ans[aa][bb] = input[i][j];
			if( aa > nn )
				nn = aa;
			if( bb > mm )
				mm = bb;
			aa += da1; bb += db1;
		}
		a += da; b += db;
	}
	nn++;mm++;
	
	printf( "%d %d\n", nn, mm );
	
	for( i=0; i<nn; i++ ) {
		for( j=0; j<mm; j++ )
			printf( "%c", ans[i][j] );
		printf( "\n" );
	}
			
	return 0;
}

⌨️ 快捷键说明

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