2011-08-09 07:55:11Morris
a202. 學長的鬼腳圖
a202. 學長的鬼腳圖
/**********************************************************************************/
/* Problem: a202 "學長的鬼腳圖 " from 成功電研社學長 */
/* Language: C */
/* Result: AC (5ms, 192KB) on ZeroJudge */
/* Author: morris1028 at 2011-08-04 21:21:14 */
/**********************************************************************************/
#include<stdio.h>
#include<string.h>
#define L 25
char map[27][L];
main() {
int a, b, rh, ch, C = 0;
for(a = 0; a < L; a++) map[0][a] = 'P';
while(scanf("%d %d", &rh, &ch) == 2) {
getchar();
int flag = 1;
for(a = 1; a <= ch; a++) {
gets(map[a]);
for(b = 0; map[a][b] && flag; b++)
if(map[a][b] == 'O' && map[a-1][b] == map[a][b])
flag = 0;
}
if(!flag) {puts("ERROR");continue;}
else {
char Ans[26], t;
for(a = 0; a <= ch; a++) Ans[a] = 'A'+a;
for(a = 0; a < rh; a++) {
for(b = 1; b <= ch; b++)
if(map[b][a] == 'O')
t = Ans[b-1], Ans[b-1] = Ans[b], Ans[b] = t;
}
char A[L], l = 0;
A[l++] = 'A';
for(b = 0; b < rh; b++) A[l++] = '-';
A[l++] = Ans[0];
A[l] = '\0', puts(A), l = 0;
for(a = 1; a <= ch; a++) {
A[l++] = ' ';
for(b = 0; map[a][b]; b++)
A[l++] = map[a][b] == 'O' ? '|' : ' ';
A[l] = '\0', puts(A), l = 0;
A[l++] = 'A'+a;
for(b = 0; b < rh; b++) A[l++] = '-';
A[l++] = Ans[a];
A[l] = '\0', puts(A), l = 0;
}
}
puts(" ");
}
return 0;
}
內容 :
大家有沒有玩過這個遊戲?
┬─────┬─
┴──┬──┴─ ......可無限延伸
───┴────
當所走的直線遇到橫線則必須轉彎
並且不得出現├┼┤連在一起的橫線
上面那個圖可以變這樣
A┬─────┬─C
B┴──┬──┴─B ......可無限延伸
C───┴────A
(測資內容已於2011年8月4日修正 , 謝謝學長的提醒)
輸入說明
:
輸入橫向的行數(x) 直向列數(y) 以及轉彎點(有為O 沒有為X)
直向列數是指畫轉換橫線的地方
其中 y <= 26 && x <= 26
X ┬─────┬
O │ │←
X ┴──┬──┴ 這兩行
O │ ←
X ───┴───
輸出說明
:
畫出直觀的圖並有走完後的結果
( 如果是鬼腳圖,請在下方輸出一行空白再換行(寬度 = x) )
( 如果是ERROR,請換行,不用空白 )
範例輸入 :
7 5 OPPOPPO POPPOPP PPOPPOP OPPOPPO POPPOPP 3 2 POP POP (有橫線在一起的錯誤)
範例輸出 :
A-------E | | | B-------C | | C-------F | | D-------D | | | E-------B | | F-------A (因瀏覽器有所不同,請參考下方提示圖片) ERROR
提示
:
背景知識:
矩陣
如果對鬼腳圖很不了解的人! 可以去google 一下!
左邊字母從 A - Z ! 測資量頗大,請注意效率!
http://ppt.cc/(Nza ( 建議網址 )
範例測資 ( 圖片請看上方連結,範例輸出因瀏覽器不同格式有所異! )
出處
:
/**********************************************************************************/
/* Problem: a202 "學長的鬼腳圖 " from 成功電研社學長 */
/* Language: C */
/* Result: AC (5ms, 192KB) on ZeroJudge */
/* Author: morris1028 at 2011-08-04 21:21:14 */
/**********************************************************************************/
#include<stdio.h>
#include<string.h>
#define L 25
char map[27][L];
main() {
int a, b, rh, ch, C = 0;
for(a = 0; a < L; a++) map[0][a] = 'P';
while(scanf("%d %d", &rh, &ch) == 2) {
getchar();
int flag = 1;
for(a = 1; a <= ch; a++) {
gets(map[a]);
for(b = 0; map[a][b] && flag; b++)
if(map[a][b] == 'O' && map[a-1][b] == map[a][b])
flag = 0;
}
if(!flag) {puts("ERROR");continue;}
else {
char Ans[26], t;
for(a = 0; a <= ch; a++) Ans[a] = 'A'+a;
for(a = 0; a < rh; a++) {
for(b = 1; b <= ch; b++)
if(map[b][a] == 'O')
t = Ans[b-1], Ans[b-1] = Ans[b], Ans[b] = t;
}
char A[L], l = 0;
A[l++] = 'A';
for(b = 0; b < rh; b++) A[l++] = '-';
A[l++] = Ans[0];
A[l] = '\0', puts(A), l = 0;
for(a = 1; a <= ch; a++) {
A[l++] = ' ';
for(b = 0; map[a][b]; b++)
A[l++] = map[a][b] == 'O' ? '|' : ' ';
A[l] = '\0', puts(A), l = 0;
A[l++] = 'A'+a;
for(b = 0; b < rh; b++) A[l++] = '-';
A[l++] = Ans[a];
A[l] = '\0', puts(A), l = 0;
}
}
puts(" ");
}
return 0;
}
上一篇:a149. 乘乘樂
下一篇:a206. 學長的鬼腳圖 (二)
可以請問一下是怎麼判斷最後答案嗎
其模擬交換位置的操作放在 Ans[] 陣列,之後才開始印出答案。
----
鬼腳圖其實也是排序算法的示意圖的一種 ... 2017-05-27 10:39:05