喵哈哈村的魔法考试 Round #10 (Div.2) B
生活随笔
收集整理的這篇文章主要介紹了
喵哈哈村的魔法考试 Round #10 (Div.2) B
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
喵哈哈村與嘩啦啦村的大戰(二)
發布時間: 2017年3月27日 09:25?? 時間限制: 1000ms?? 內存限制: 128M
描述喵哈哈村因為和嘩啦啦村爭奪稀有的水晶資源,展開了激烈的戰斗。
喵哈哈村與嘩啦啦村戰斗的地圖可以視為一個二維平面。
喵哈哈村準備修建n個防御工事,唯一的要求就是任意兩個防御工事之間的距離不得大于R。
在喵哈哈村修建完防御工事之后,嘩啦啦村準備選擇一個防御工事進行攻擊,這個防御工事包括離被攻擊防御工事距離小于等于r的防御工事都將被摧毀。其中:R*R=2*r*r。
現在問題來了,請問喵哈哈村怎么修建,才能使得最后被摧毀的建筑最少。
輸入本題包含若干組測試數據。
第一行一個n,表示喵哈哈村要修建的建筑數量。
滿足 1<=n<=1e18
輸出最少被摧毀的數量。
樣例輸入1 復制 3 樣例輸出1 1題解:我感覺這個題目還是稍微有點難想啊。。。但是想出來了的話就很簡單了(廢話)。
步驟:先手動模擬一下,第一個點,以半徑為R作圓;第二個點一定在圓內,最好的情況就是在圓弧上,再以R為半徑作第二個點的圓;然后第三個點在前兩個圓的相交的部分內,同樣的方法再作第三個圓。
然后我們可以發現這是一個等邊三角形啊!找三角形的重心(為什么會想重心?因為我想最優情況應該是重心到三個點的距離都大于安全距離)發現,這個點到三個頂點的距離安全距離,所以不能建立在
重心上,然后我們就會想去盡可能減少被摧毀的建筑物,至少是一個,既然重心的不滿足我想要的條件,那么我就想最壞情況就摧毀兩個吧,所以把第四個點放在其中一個頂點的盡可能近的位置;接下來的
點都是這樣分析,然后就大膽猜想一下這個解應該是(n+2)/3 ... 提交上去,A了, 果然是啊,hhh。 說明做題的時候還是應該相信自己的判斷和直覺(當然是在有理論依據的情況下) 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 5 int main(){ 6 ll n; 7 while(cin>>n){ 8 if(n%3==0) cout<<n/3<<endl; 9 else{ 10 cout<<n/3+1<<endl; 11 } 12 } 13 return 0; 14 }
?
轉載于:https://www.cnblogs.com/ledoc/p/6649006.html
總結
以上是生活随笔為你收集整理的喵哈哈村的魔法考试 Round #10 (Div.2) B的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用 Python 切割图片
- 下一篇: Oracle-11g-R2 RAC 环境