Offer收割 程式設計練習賽9 C 三等分

2021-09-29 18:57:19 字數 1320 閱讀 3357

【題目鏈結】:

【題意】.

【題解】

首先算出所有節點的權值的和val;

然後如果val%3!=0則直接輸出0;

否則令key = val/3

對於當前節點x;

有兩種情況;

一種是

兩個要刪掉的節點都在同一棵子樹裡面;

則某乙個子樹裡面必須有乙個子樹和為key的節點;同時這個點x的子樹和為2*key;->注意這時x節點不能為根節點

另外一種情況就是;

兩個key的節點分別在x的兩棵子樹裡面;

【number ofwa】

1(忘記初始化vector了)

【完整**】

#include 

using

namespace

std;

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

#define ll long long

#define rep1(i,a,b) for (int i = a;i <= b;i++)

#define rep2(i,a,b) for (int i = a;i >= b;i--)

#define mp make_pair

#define pb push_back

#define fi first

#define se second

#define ms(x,y) memset(x,y,sizeof x)

typedef pair pii;

typedef pairpll;

const

int dx[9] = ;

const

int dy[9] = ;

const

double pi = acos(-1.0);

const

int n = 1e5+100;

int n,root,a[n],fa,key;

vector

son[n];

ll dp1[n],sum[n],ans;

void dfs(int x)

if (x!=root && sum[x]==key*2) ans+=dp1[x];

if (sum[x]==key) dp1[x]++;

}int main()

if (key%3!=0)

key/=3;

dfs(root);

cout

<< ans << endl;

}return

0;}

Offer收割 程式設計練習賽1

做了三題,題目都比較暴力。a題 題意 給你乙個三階的幻方,三階幻方指的是將1 9不重複的填入乙個3 3的矩陣當中,使得每一行 每一列和每一條對角線的和都是相同的。現在準備將乙個三階幻方中的一些陣列抹掉 0代替 交給你來進行還原,並且希望她能夠判斷出究竟是不是只有一組解。如果只有一組解,輸出該三階幻方...

Offer收割 程式設計練習賽7

比較容易想到是o n 2 的解決方案,遍歷n種刪除可能,每次遍歷o n 時間求總高度。前者優化比較困難,因而想辦法優化每次遍歷求高度的時間。由前往後遍歷,當刪除第i個時,先前的排版是連續的,從而通過計數器等累加方法可以求得已完整行的總高度presum,以及當前未完整行的w,h。include def...

Offer收割 程式設計練習賽26

題解 按照條件求解出最大的三角形和最小的三角形,然後求重心即可。這裡求解面積有兩種方法 海 式 p p a p b p c 將三角形的每一條邊求解出來,然後進行處理 用有向向量進行計算,如果設a x0,y 0 b x1,y 1 c x2,y 2 三點為三角形三個頂點,a 為有向面積,那麼2a x0 ...