時間限制: 1 sec 記憶體限制: 128 mb
題目描述
工匠小k最近有n個零件需要加工。每個零件都需要ti天的時間來完成,每個零件每延遲一天加工都要繳納一定的罰金si。延遲的天數為從今天算起到該工作開始的那天,第乙個零件加工沒有罰金。現在小k想知道怎樣安排加工順序可以使他要交的罰金最少,最少是多少。
這個數可能會很大,請輸出這個數對m取模後的結果。
輸入 輸入檔名為process.in。
輸入第一行為乙個整數n,表示需要加工的零件總數。
第二行為乙個整數m,表示答案要對m取模。
第3~n+2行,每行兩個整數ti和si。
輸出 輸出檔名為process.out。
輸出僅一行,乙個整數,表示小k最少要繳納的罰金對m取模的結果。
樣例輸入
process.in
2 100
2 33
33 2
process.out
4process.in
4 100
3 3
6 4
2 2
8 5
process.out
81 樣例輸出
【輸入輸出樣例解釋1】
先加工第乙個,需要2天時間,再加工第二個。需要繳納的罰金為2×2=4。
【輸入輸出樣例解釋2】
如果按照1→2→3→4的順序進行加工,需要繳納的罰金為0×3+3×4+(3+6)×2+
(3+6+2)×5=85;
最佳方案是3→1→2→4,此時需要繳納的罰金為0×2+2×3+(2+3)×4+(2+3+6)×5=81。
提示 【資料範圍】
對於40%的資料,0< n≤10,000,0< ti,si≤10,000;
對於80%的資料,0< n≤100,000,0< ti,si≤2×10^9,0< m≤10^8;
對於100%的資料,0< n≤100,000,0< ti,si≤2×10^9,0< m≤10^18。
** 2013學軍中學noip模擬day1
此題我們可以使用貪心,我們可以發現對於第i 個零件和第i+1個零件有
若i在i+1前則co
st=t
[i]∗
s[i+
1]若i在i+1後則co
st′=
t[i+
1]∗s
[i]
若cos
tst′ 則i在i+1前花費更小,我們將t[
i]∗s
[i+1
]i+1]
∗s[i
] 變換等式,則為t[
i]s[
i]i+1]
s[i+
1]則我們可以按這個分式來排序(為了使得前面的數都比後面的優),但是為了避免精度誤差我們就按t[
i]∗s
[i+1
]i+1]
∗s[i
] 來排序
我們可以證明這為什麼是最優的(當前的陣列是已排序完的):
設我們已經加工了x-1個零件,現在我們要加工第x個零件。
則對於x若x+1更優,但這是不可能的因為我們已經按照t[
i]∗s
[i+1
]i+1]
∗s[i
] 來排序了。
同時我們也可以得到x+1比x+2更優,以此類推可以發現x比後面的都優。
tip:此題直接乘會爆long long,所以我們可以用快速乘的方法來避免這個問題。
#include
#include
#include
using
namespace
std;
int n;
long
long m;
struct node
a[150000];
bool cmp(node a,node b)
long
long cheng(long
long a,long
long b)
return ans;
}int main()
printf("%lld\n",ans);
return
0;}
零件加工 貪心 題解
時間限制 1 sec 記憶體限制 128 mb 提交 24 解決 7 提交 狀態 討論版 命題人 外部匯入 題目描述 工匠小k最近有n個零件需要加工。每個零件都需要ti天的時間來完成,每個零件每延遲一天加工都要繳納一定的罰金si。延遲的天數為從今天算起到該工作開始的那天,第乙個零件加工沒有罰金。現在...
加工零件 execution
題面 有 n 個零件需要加工。零件之間有 m 個限制,x y 表示 x 要在 y 之前先加工完。每個零件的加工時間都是 1。現在有無限個多個工具機,在滿足限制條件的情況下,零件可以同時加工。求加工完所有零件最少需要多少時間,然後還要求出在時間最少的前提下,最少需要多少工具機。資料保證有解。對於 10...
NOIP 加工零件 題解
加工零件凱凱的工廠正在有條不紊地生產一種神奇的零件,神奇的零件的生產過程自然也很神奇。工廠裡有 nn 位工人,工人們從 1 sim n1 n 編號。某些工人之間存在雙向的零件傳送帶。保證每兩名工人之間最多隻存在一條傳送帶。如果 xx 號工人想生產乙個被加工到第 l l gt 1 l l 1 階段的零...