6 5 競賽題目選講

2022-09-19 15:03:10 字數 1663 閱讀 1641

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 請編寫程式,根據輸入的任何乙個正整數,找出符合這種要求的所有連續正整數序列 輸入資料 乙個正整數,以命令列引數的形式提供給程式。輸出資料 在標...