undraw_the_trees
#include#includeusing namespace std;
const int maxn = 20000+5, maxl = 200+5;
int cnt = 0, sum = 0;
string tree[maxl];
struct node node[maxn];
node* build(int p, int s, int e, string name)
if(te > tree[p+3].length()-1) te = tree[p+3].length()-1;
root->v.push_back(build(p+3, ts, te+1, name));
}else
} }
return root;
}void print_tree(node* root)
int main()
string name = " ";
int pos = 0;
for(; pos < sum; pos++)
if(name != " ") break;
} node* root = build(pos+3, 0, tree[pos+3].length(), name);
cout << "(";
if(name != " ") print_tree(root);
cout << ")";
cout << endl;
} return 0;
}
又是一道模擬題,筆者原先了解錯了要求,因此一直wa,這邊需要尤為注意的乙個地方就是,'-'的覆蓋範圍可能超過下乙個字串的長度(如果按照筆者這樣儲存的話),此時需要進行特判修改
同時因為這是一道遞迴建樹題目,並且對樹沒有修改,所以可以在遞迴建樹的過程中直接進行輸出,也就是根本不需要建樹,只能說作者的思路更加清晰
做題目前最好給自己一些思考時間,更加看透問題的本質,否則後面會花費大量時間進行除錯,得不償失,越是看似簡單的問題越要小心
作者分析道:直接在二維字元陣列裡面遞迴即可,無須建樹,注意對空樹的處理,以及結點標號可以是任意可列印字元。**如下:
#include#include#includeusing namespace std;
const int maxn = 200 + 10;
int n;
char buf[maxn][maxn];
//遞迴遍歷並且輸出以字元buf[r][c]為根的樹
void dfs(int r, int c)
} printf(")");}/*
注意fgets的使用,fgets(char buf, int n, stdin)從stdin中讀取最多(n-1)個字元,注意fgets並不是讀取一行才會停止,n的優先順序在某些情況下高於換行
fgets讀取到\n的時候會結束,如果此時還沒有到n-1個字元,那麼他會儲存,也就是說fgets只是以\n作為終止條件之一,並不是其不會讀取換行符,
這也是需要注意的地方
*/ void solve()
printf("(");
if(n)
} printf(")\n");
}int main()
演算法競賽入門第三章競賽題目選講
程式3 5 tex中的引號 題意 給出一段字串,將左引號變為 右引號變為 輸入 帶有引號的字串 輸出 變化之後的字串 思路 用flag訊號q 來判斷左右,每當表達一次引號,則變換一次q include int main else printf c c return0 程式3 6 wertyu 輸入 ...
百度程式設計競賽題目
原題是這樣子的 題目描述 乙個正整數有可能可以被表示為n n 2 個連續正整數之和,如 15 1 2 3 4 5 15 4 5 6 15 7 8 請編寫程式,根據輸入的任何乙個正整數,找出符合這種要求的所有連續正整數序列 輸入資料 乙個正整數,以命令列引數的形式提供給程式。輸出資料 在標準輸 出上列...
百度程式設計競賽題目
第一題 連續正整數 10分 題目描述 乙個正整數有可能可以被表示為n n 2 個連續正整數之和,如 15 1 2 3 4 5 15 4 5 6 15 7 8 請編寫程式,根據輸入的任何乙個正整數,找出符合這種要求的所有連續正整數序列 輸入資料 乙個正整數,以命令列引數的形式提供給程式。輸出資料 在標...