2023年NOIP提高組 聰明的質檢員

2021-07-05 18:36:20 字數 1051 閱讀 9003

小 t 是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有n 個礦石,從1到n 逐一編號,每個礦石都有自己的重量wi 以及價值vi。檢驗礦產的流程是:見圖

若這批礦產的檢驗結果與所給標準值s 相差太多,就需要再去檢驗另一批礦產。小t不想費時間去檢驗另一批礦產,所以他想通過調整引數w 的值,讓檢驗結果盡可能的靠近標準值s,即使得s-y 的絕對值最小。請你幫忙求出這個最小值。

大體思路是二分w然後求y驗證,因為會有重複的區間,暴力求會超時,可以用每次二分的w來o(n)預處理 v[i]字首和 和 乙個區間的符合條件的w[i]數量,還有就是資料範圍需要用long long(調了好久才發現qaq)。

#include

#include

#include

#define ll long long

using

namespace

std;

const

int size = 400010;

const ll inf = (1ll) << 60;

int n,m;

ll s;

int w[size],v[size];

ll sum[size];

int cnt[size];

ll min(ll a,ll b)

ll abs(ll x)

struct sect

sec[size];

ll ask(int mid)

for(int i = 1 ; i <= m ; i ++)

ans += (cnt[sec[i].r] - cnt[sec[i].l-1]) * (sum[sec[i].r] - sum[sec[i].l-1]);

return ans;

}int main()

cout

0;}

傳送門 :

codevs 1138

tyvj 1696

NOIP提高組2011 聰明的質監員

題目 小t 是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有 n 個礦石,從 1到n 逐一編號,每個礦石都有自己的重量 wi 以及價值vi 檢驗礦產的流程是 1 給定m 個區間 li,ri 2 選出乙個引數 w 3 對於乙個區間 li,ri 計算礦石在這個區間上的檢驗值yi 這批礦產的檢驗...

NOIP 2011 提高組 聰明的質監員

二分 字首和 因為w有已知範圍,即 min 1,max 1 且它會y隨著w的增大而減小,隨著w的減小而增大,所以顯然可以二分。二分的時候區間肯定不能直接列舉了,對於乙個區間的求和以及滿足個數的求解,我們用2個字首和處理即可。可能你們有人會想題目是 s y 那麼二分是否能保證最優呢?實際上是可以的,當...

NOIP2011提高組 聰明的質監員

小 t 是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有n 個礦石,從1 到n 逐一編號,每個礦石都有自己的重量wi 以及價值vi。檢驗礦產的流程是 1 給定m 個區間 li,ri 2 選出乙個引數w 3 對於乙個區間 li,ri 計算礦石在這個區間上的檢驗值yi 這個區間上所有重量大於等...