27 条题解
-
0stcdalyc LV 10 @ 2021-10-14 01:28:21
递归即可,比如说4个节点的树。除去根节点,剩下三个节点。
按顺序排的话,就是03 12 21 30 (就是先是左子树是0个节点 拼接 右子树是3个节点, 然后是左子树是1个节点 拼接 右子树是2个节点...)
假设X个节点的树,有A种情况,假设Y个节点的树,有B种情况。
那么 XY (就是左子树是X个节点,右子树是Y个节点)有 A x B 种情况。#include <stdlib.h> #include <stdio.h> #define MAX_NODE 18 int tCount[MAX_NODE]; // 固定节点的个数 int nodeId[MAX_NODE]; //序号(节点最大) void buildTc() { tCount[0] = tCount[1] = 1; nodeId[0] = 0; nodeId[1] = 1; for(int i=2;i<MAX_NODE;i++) { int subC = i-1; int sum = 0; for(int j=0;j<=subC;j++) { sum += tCount[j] * tCount[subC - j]; } tCount[i] = sum; nodeId[i] = nodeId[i-1] + tCount[i]; // printf("%d = %d\n", i, tCount[i]); } } int printNode(int n) { int nodeLevel = 0; for(int i=MAX_NODE-1;i>=0;i--) { if(n > nodeId[i]) { nodeLevel = i+1; break; } } int subC = nodeLevel-1; int nId = nodeId[subC]; for(int j=0;j<=subC;j++) { int nl = nId + tCount[j] * tCount[subC-j]; if(nl < n) { nId = nl; } else { // 左节点j, 右节点subC-j int leftCount = n - nId; //左边排第几 int lIdx = leftCount / tCount[subC-j]; int rIdx = leftCount % tCount[subC-j]; int lRealIdx = j == 0 ? 0 : nodeId[j-1]+(rIdx != 0 ? 1 : 0) + lIdx; if(lRealIdx != 0) { putchar('('); printNode(lRealIdx); putchar(')'); } putchar('X'); //右边排第几 int rRealIdx = subC-j ==0 ? 0 : nodeId[subC-j-1] + (rIdx > 0 ? rIdx : tCount[subC-j]); if(rRealIdx != 0) { putchar('('); printNode(rRealIdx); putchar(')'); } break; } } } int main() { buildTc(); int n; char isFirst = 1; do { scanf("%d", &n); if(n == 0) break; if(isFirst) isFirst = 0; else putchar('\n'); printNode(n); } while(1); return 0; }
-
02015-05-29 11:05:23@
我不会做,让小朋友cpc被xxx吧
-
02009-02-20 18:33:50@
递归不是我强项
-
02008-11-08 11:15:10@
数学题。先找规律,再利用catalan数求解。我的程序有点慢。
Accepted 有效得分:100 有效耗时:418ms -
02008-10-31 20:31:34@
ORZ啊oRZ- -
-
02008-10-31 20:25:50@
莫非又要用高精了...ORZ...
-
02008-10-15 19:56:50@
和卡特兰数列有关系的
挺烦人的,特别是细节. -
02008-10-08 19:47:36@
告诉大家一个秘密,CPC是一个IOI预备选手。。。
-
02008-09-30 11:24:03@
构造。
-
02008-09-25 20:23:43@
我写了55行T.T
膜拜楼下40行
-
02008-08-21 15:42:20@
sd ][
-
02008-08-21 04:24:22@
POJ1095
-
02008-08-10 13:18:38@
郁闷啊~~忘了换行……T_T
-
02008-08-07 23:33:14@
离地心都三四里了 - -
-
02008-08-07 10:49:20@
我好激动!!(- -|||)
找规律跟catalan差不多 预处理的时候竟然计数计错了!!!啊啊啊 查了半天
-
02008-08-03 22:00:03@
是那种传说中的解码么。。
-
02008-08-01 14:35:57@
ZJU1062
-
02008-07-28 18:44:26@
不是有10个吗?
-
02008-07-27 11:13:28@
请问,CPC为什么要逃离
-
02008-07-26 21:08:15@
cpc...
这提明明考递归,怎么变成数论了??