Cat Virus
Cat Virus
題意:
讓你構(gòu)造一顆樹,要求如果一個(gè)點(diǎn)為黑,其子樹全為黑,白點(diǎn)任意,現(xiàn)在讓你構(gòu)造一棵樹,使其染色方案數(shù)為K,節(jié)點(diǎn)盡可能少
題解:
首先畫出k<=9的全部情況,并找規(guī)律
我們發(fā)現(xiàn),如果k為奇數(shù),則根節(jié)點(diǎn)左連一個(gè)點(diǎn),右連一個(gè)點(diǎn),然后K除以2,如果k為偶數(shù),右側(cè)連一個(gè)點(diǎn),使得k-1,這樣k又為奇數(shù),一直循環(huán)
當(dāng)k=3時(shí)記得特判
u1s1,想不到。。比賽時(shí)真的沒想到
代碼:
#include<bits/stdc++.h> using namespace std; typedef long long LL; LL k; int main(){cin>>k;LL fa=1,id=1,tmp=k,cnt=1;while(tmp>3){if(tmp&1){tmp/=2;cnt+=2;}else{tmp--;cnt++;}}if(tmp==3) cnt++;//多加一個(gè)點(diǎn) cout<<cnt<<endl;while(k>3){if(k&1){//奇數(shù) k/=2;id++;cout<<fa<<" "<<id<<endl;//左 id++;cout<<fa<<" "<<id<<endl;//右 fa=id;}else{//奇數(shù) k--;id++; cout<<fa<<" "<<id<<endl;//右邊 fa=id;}}if(k==3){id++;cout<<fa<<" "<<id<<endl;//特判情況,連一個(gè)右邊 } }總結(jié)
- 上一篇: 悲伤qq个性签名
- 下一篇: C. The Sports Festiv