#include <stdio.h>
int main() {
int ix, j = -1;
char id, stk[4000];
while (scanf("%hhd-%d", &id, &ix) == 2 && id && ix) {
for (id--; j >= 0 && ix > 0 && (stk[j]^id) == 1; ix--, j--);
while (ix-- > 0) stk[++j] = id;
}
while (j >= 0) {
for (ix = 0, id = stk[j]; j >= 0 && stk[j] == id; j--, ix++);
printf("%c-%d ", '1' + (id ^ 1), ix);
}
}
只需消除回头路,相邻的相反方向操作抵消,用栈。
方便起见每1步作为一项(严格来说可能爆栈),方向1-4减1变成0-3方便位操作检查是否是相反方向。

京公网安备 11010502036488号