第一行包括兩個數t,n,表示有n個蛋糕,最小的蛋糕的質量與最大的蛋糕的質量的比值不小於t接下來n行,每行乙個數wi,表示n個蛋糕的質量
輸出包括一行,為最小切割的刀數示例1資料保證切割次數不超過500
0.99 32000 3000 4000
6
0.5 < t < 11 <= n <= 1000
1 <= wi <= 1000000
題意 :問最小切蛋糕次數,使得所有蛋糕中最小值與最大值的比值大於等於 t
思路分析 :
首先我們要想的乙個問題,蛋糕要怎麼切?
平均切嗎?當然是的,我們要確保的答案是最小值與最大值的比值大於等於 t ,只有當平均切的時候,才能使每塊蛋糕的質量更加集中,才會使這個比值更大。
其次就比較好寫了,2種方法
第一種先對蛋糕質量排序,列舉質量最小的一塊的切的次數,然後從最大的質量的蛋糕往小的判斷即可。
**示例 :
/** parasol
*/#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;
#define ll long long
const int maxn = 1e6+5;
const int mod = 1e9+7;
const double eps = 1e-9;
const double pi = acos(-1.0);
const int inf = 0x3f3f3f3f;
double t;
int n;
double pre[1005], a[1005];
int ans = 0;
int sign = 0;
void fun(int x, double mm)
double f = mm/pre[x];
if (f > t || fabs(f-t)p) f = p/mm;
else f = mm/p;
if (f > t || fabs(f-t)1; i--)
else if (p < f)
}else }}
}}int main()
sort(pre+1, pre+1+n);
for(int i = 0; i <= 500; i++)
}
return 0;
}
方法二 、 用優先佇列
將結點定義成
struct node;
每次從佇列中取出最大值,看一下符不符合題意,不符合就多切一下
優先佇列貪心
最近做了幾個用優先佇列進行貪心的題目,這裡寫下來,以免忘了。1 cf 799 b 每次選最便宜的衣服,沒什麼好說的,一發過 include include include include include define n 6005 define inf 0x3f3f3f3f include incl...
luogu P1714 切蛋糕 單調佇列
單調佇列傻題.考慮以 i 結尾的答案 max sumv sumv j in i m,i 1 sumv 為字首和 稍微搞一搞,發現 sumv 這個是固定的.我們只需維護 min sumv 即可.單調佇列優化一下,每次取隊首即可.code include include includeusing nam...
luogu P1714 切蛋糕 單調佇列
單調佇列傻題.考慮以 i 結尾的答案 max sumv sumv j in i m,i 1 sumv 為字首和 稍微搞一搞,發現 sumv 這個是固定的.我們只需維護 min sumv 即可.單調佇列優化一下,每次取隊首即可.code include include includeusing nam...