锘?!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Flip and Turn
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 957 | Accepted: 330 |
Description
Let us define a set of operations on a rectangular matrix of printable characters.
A matrix A with m rows (1-st index) and n columns (2-nd index) is given. The resulting matrix B is defined as follows.
Transposition by the main diagonal (operation identifier is 鈥?鈥?: Bj,i =Ai,jTransposition by the second diagonal (鈥?鈥?: Bn?j+1,m?i+1 = Ai,jHorizontal flip (鈥楬鈥?: Bm?i+1,j = Ai,jVertical flip (鈥榁鈥?: Bi,n?j+1 = Ai,jRotation by 90 (鈥楢鈥?, 180 (鈥楤鈥?, or 270 (鈥楥鈥? degrees clockwise; 90 degrees case: Bj,m?i+1 = Ai,jRotation by 90 (鈥榅鈥?, 180 (鈥榊鈥?, or 270 (鈥榋鈥? degrees counterclockwise; 90 degrees case: Bn?j+1,i =Ai,j
You are given a sequence of no more than 100 000 operations from the set. Apply the operations to the given matrix and output the resulting matrix.
Input
At the first line of the input file there are two integer numbers 鈥?nbsp;m and n (0 < m, n鈮?300). Then there are m lines with n printable characters per line (we define a printable character as a symbol with ASCII code from 33 to 126 inclusive). There will be no additional symbols at these lines.
The next line contains the sequence operations to be performed, specified by their one-character identifiers. The operations should be performed from left to right.
Output
Two integer numbers, the number of rows and columns in the output matrix. Then the output matrix must follow, in the same format as the input one.
Sample Input
1 2 3 4 5 | 3 4 0000 a0b0 cdef A1 |
Sample Output
1 2 3 4 | 3 4 cdef a0b0 0000 |
棰樼洰澶ф剰錛氱粰浣犱竴涓猰*n鐨勭煩闃碉紝閫氳繃欏烘椂閽堟棆杞紝閫嗘椂閽堟棆杞紝姘村鉤緲昏漿錛屽瀭鐩寸炕杞紝瀵硅綰挎棆杞紝鍙嶅瑙掔嚎鏃嬭漿鍙樻崲寰楀埌鏂扮煩闃點備絾鏄笉鑳界洿鎺ュ鍘熺煩闃墊搷浣滐紝鏃墮棿澶嶆潅搴︿負O(10^5*10^5)錛屼細瓚呮椂錛屼絾鏄浣曚繚瀛樺彉鍖栫殑榪囩▼鍛紝鎴戜滑涓嶉渶瑕佺煡閬撳彉鍖栬繃紼嬶紝鍙渶瑕佺煡閬撶粨鏋滃嵆鍙傜敱浜庢棆杞炕杞兘鏄腑蹇冨縐扮殑錛屽彲浠ラ噰鐢ㄤ竴涓?*2鐨勫皬姝f柟褰㈣褰曞彉鍖栨儏鍐碉紝鐒跺悗灝忕煩闃靛彉鍖栧緱鍑烘渶緇堢粨鏋滀箣鍚庡啀鐩稿簲鍙樺寲澶х煩闃點傛椂闂村鏉傚害涓篛(10^5*5)
棰樼洰鍦板潃錛欶lip and Turn
AC浠g爜錛?/span>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 | #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> #include using namespace std; char a[305][305]; char b[305][305]; char str[100005]; int m,n; int tb[3][3];
void con1() { int i,j; for(i=1; i<=n; i++) { for(j=1; j<=m; j++) { b[i][j]=a[j][i]; } }
for(i=1; i<=n; i++) { for(j=1; j<=m; j++) a[i][j]=b[i][j]; a[i][j]='\0'; } swap(n,m); }
void con2() { int i,j; for(i=1; i<=m; i++) { for(j=1; j<=n; j++) { b[n-j+1][m-i+1]=a[i][j]; } }
for(i=1; i<=n; i++) { for(j=1; j<=m; j++) a[i][j]=b[i][j]; a[i][j]='\0'; } swap(n,m); }
void con3() { int i,j; for(i=1; i<=m; i++) { for(j=1; j<=n; j++) { b[m-i+1][j]=a[i][j]; } }
for(i=1; i<=m; i++) { for(j=1; j<=n; j++) a[i][j]=b[i][j]; a[i][j]='\0'; } }
void con4() { int i,j; for(i=1; i<=m; i++) { for(j=1; j<=n; j++) { b[i][n-j+1]=a[i][j]; } }
for(i=1; i<=m; i++) { for(j=1; j<=n; j++) a[i][j]=b[i][j]; a[i][j]='\0'; } }
void con5() { int i,j; for(i=1; i<=m; i++) { for(j=1; j<=n; j++) { b[j][m-i+1]=a[i][j]; } }
for(i=1; i<=n; i++) { for(j=1; j<=m; j++) a[i][j]=b[i][j]; a[i][j]='\0'; } swap(m,n); }
void con6() { int i,j; for(i=1; i<=m; i++) { for(j=1; j<=n; j++) { b[n-j+1][i]=a[i][j]; } }
for(i=1; i<=n; i++) { for(j=1; j<=m; j++) a[i][j]=b[i][j]; a[i][j]='\0'; } swap(m,n); }
void debug() { int i,j; for(i=1;i<=2;i++) { for(j=1;j<=2;j++) cout<<tb[i][j]<<" ";="" cout<<endl;="" }="" int="" main()="" {="" i,j;="" while(~scanf("%d%d",&m,&n))="" for(i="1;" i<="m;" i++)="" scanf("%s",a[i]+1);="" scanf("%s",str);="" tb[1][1]="1,tb[1][2]=2,tb[2][1]=3,tb[2][2]=4;" i<strlen(str);="" if(str[i]="='1')" swap(tb[1][2],tb[2][1]);="" else="" swap(tb[1][1],tb[2][2]);="" swap(tb[1][1],tb[2][1]);="" swap(tb[1][2],tb[2][2]);="" swap(tb[1][1],tb[1][2]);="" swap(tb[2][1],tb[2][2]);="">='A'&&str[i]<='C') { int s=str[i]-'A'+1; for(j=0;j<s;j++) {="" swap(tb[2][2],tb[1][2]);="" swap(tb[1][1],tb[1][2]);="" swap(tb[1][1],tb[2][1]);="" }="" else="" if(str[i]="">='X'&&str[i]<='Z') { int s=str[i]-'X'+1; for(j=0;j<s;j++) {="" swap(tb[1][1],tb[2][1]);="" swap(tb[1][1],tb[1][2]);="" swap(tb[2][2],tb[1][2]);="" }="" debug();="" 鏄腑蹇冨縐幫紝欏烘椂閽堣漿錛屽縐拌漿錛屾部瀵硅綰挎姌閮芥槸涓績瀵圭О錛屾墍浠?="" 4鍙兘鏄瑙?"" if(tb[1][1]="=1&&tb[1][2]==2&&tb[2][1]==3&&tb[2][2]==4)" {}="" 1="" 2="" 3="" 4="" else="" con1();="" con4();="" con5();="" con2();="" {con2();="" con1();}="" con6();="" {con6();="" con2();}="" cout<<m<<"="" "<<n<<endl;="" for(i="1;" i<="m;" i++)="" cout<<br> <br>
<br> </s;j++)></s;j++)></tb[i][j]<<"></algorith |