剛看到這題時,還在想怎麼貪心,然後很快的打完之後發現貪心是錯的。
然後仔細的看了看範圍,哈哈,這不是二分嗎。
二分出乙個mid,然後在所有行裡面用mid*j-字首和然後找乙個最大值。
最後把這些最大值加起來,判斷一下就好了。
#include
#include
#include
#include
#include
#include
#define fo(i,a,b) for(i=a;i<=b;i++)
#define rep(i,a) for(i=first[a];i;i=next[i])
using
namespace
std;
typedef
long
long ll;
int i,j,k,t,n,m,x;
double ans,o,da,ans1,p,shu,l,r,mid;
ll q,b[100007];
int de(int x,int y)
int main()
}l=0,r=1000000000;
while(r-l>1e-5)
o+=da;
}if(o>=0)l=mid;else r=mid;
}printf("%.4f\n",l);
}
NOIP2016提高A組五校聯考1 道路規劃
我們考慮,當現在有乙個合法的集合時,如何往裡面增加乙個點,使這個集合仍然合法。假設現在有乙個合法的集合,那麼當我們加入乙個點,它的道路穿過來整個集合,那麼 然後搞一遍最長下降子串行就可以了。include include include include include const int maxlo...
NOIP2016提高A組五校聯考1 挖金礦
答案,保留4位小數 4 3 4 3 3 5 1 6 2 6 1 3 2 9 4.4286 n m 100000 很簡單的一道題 設sum i j 表示第i列向下挖j行的字首和 假設第i列挖h i 行 設二分的答案是m,答案如果合法,那麼 n i 1s um i h i ni 1 h i m 移項 i...
NOIP2016提高A組五校聯考1 道路規劃
一開始想到了70分的,然後很快發現線段樹的優化,結果乙個細節掛掉qaq 首先70分的話就是乙個f i 表示上面的位置最後乙個為i的時候可以選的最大的集合,顯然在下面的值相同的那個點一定是在最右邊的,那麼直接n2 即可 然後100分的話就是拿線段樹,那麼就可以用log的時間來求出每乙個f i 的值 v...