a meeting
答案為最遠關鍵點的距離的一半向上取整,也就是關鍵點的樹的直徑的一半向上取整。
先考慮兩個點,他倆是最遠距離,那麼最短時間就是⌈d/2⌉,在此基礎上再加乙個點(前提是加上這個點,後不影響初始條件,即初始的兩個點之間的距離最遠),那麼不會影響答案,因為他與另外兩個點的相會的時間必然小於⌈d/2⌉,這個題是最小化最大值。
所以答案是關鍵點的樹的直徑的一半向上取整.
求樹的直徑的方法有兩半bfs,兩邊dfs,書上dp。
另附兩遍bfs的**:
#include #define inf 0x3f3f3f3f
#define pair pair#define int long long
#define fir first
#define sec second
namespace io
use[y]=1;}}
} return last;
}signed main()即可。
加入a為13 (8+4+1) 對應模數為(2+1 +1),多出來的1導致了結果mod 3=1,我們用a減去這個1就是3的倍數,此時這個3的倍數的被減去的二進位制位為0,可以通過減去另乙個1,產生的另乙個3的倍數,兩者相或可以彌補二進位制位置。
• 如果a中的二進位制位有恰好乙個mod 3=1的,那麼設mod 3=1的這個位為p,mod 3=2 的某個位為q,我們取即可。
如a= 43 (32+8+2+1)對應模數為(2+2+2 +1),多出來的1導致了結果mod 3=1,剪掉這個 1,則產生第乙個3的倍數,這個1隨便加上乙個2,也是3的倍數,同時可相互彌補二進位制中的位數,
• 如果a中的二進位制位沒有mod 3=1的,那麼假設有三個mod 3=2的位p,q,r,我們取即可。
如a= 682 (512+128+32+8+2)對應模數為(2+2+2 +2+2),多出來的4導致了結果mod 3=1,剪掉這個 2+2,則產生第乙個3的倍數,這兩個2隨便加上乙個2,也是3的倍數,同時可相互彌補二進位制中的位數,
• 若a mod 3=2只需把上面的討論中1與2互換即可,是完全對稱的。
我們簡單分別舉一下例子:
至少兩個mod 3=2:
如a= 14 (8+4+2)對應模數為(2+1 +2),多出來的2導致了結果mod 3=2,剪掉這個2,則產生第乙個3的倍數,這個2隨便加上乙個1,也是3的倍數,同時可相互彌補二進位制中的位數,
恰好乙個mod 3=2的:
如a= 85 (64+16+4+1)對應模數為(1+1+1 +2),多出來的2導致了結果mod 3=2(也可理解為多出來的1+1 導致mod3=2),剪掉這個2,則產生第乙個3的倍數,這個2隨便加上乙個1,也是3的倍數,同時可相互彌補二進位制中的位數,
沒有mod 3=1的:
如a= 85 (64+16+4+1)對應模數為(1+1+1 +1+1),多出來的1+1導致了結果mod 3=2,剪掉這個(1+1),則產生第乙個3的倍數,這兩個1隨便加上乙個1,也是3的倍數,同時可相互彌補二進位制中的位數,
另附**:
#include #define inf 0x3f3f3f3f
#define pair pair#define int long long
#define fir first
#define sec second
namespace io
base*=2;
x>>=1;
}}signed main()
}else }}
} return 0;
}
k number
字尾和找規律,
簡單附**
#include #define inf 0x3f3f3f3f
#define pair pair#define int long long
#define fir first
#define sec second
namespace io
} if(z)res+=(1+z)*z/2;z=0;
//printf("%lld\n",res);
for(int i=len;i>=1;i--)
res+=m[num[i]%3];
} printf("%lld\n",res);
return 0;
}
2019牛客暑期多校訓練營(第四場)A
題意 給定n個頂點,n 1條邊權為1的邊,將各個頂點連成乙個最小生成樹,再給定乙個k,表示有多少個人,每個人都在特點的乙個頂點上,現在這些人要相會,求使得這些人能夠相聚在一起的最短時間。看了標程,答案就是k個人當中那2個距離最遠的人的距離d,答案就是d 2向上取整。證明 必要性 k個人當中,最遠的那...
牛客暑期多校訓練營B Boundary
給定n個點,然後確定乙個過原點的圓,要使這n個點盡可能多的存在與圓上,最後輸出最多的存在於圓上的點的個數 三點確定乙個圓,我們已知這個圓必定經過原點,所以再依次利用三點求圓心的公式列舉每兩個點與原點 三點不共線 確定的圓心,最後選擇確定次數最多的圓心構成的圓 include include incl...
2019牛客暑期多校訓練營(第九場)
d knapsack cryptosystem 折半搜尋,晚上又去看了挑戰程式設計,對於時間複雜度高的情況,可以通過犧牲空間來降低時間複雜度。先把前半部分所有可以組合的情況列舉出來,然後對於後半部分依次列舉,那麼複雜度變化為o 2 36 o 2 18 2 18log 18 顯然就可做了,折半的裸題。...