本題是乙個比較明顯的二分題,顯然可以看出來這個標準值s是可以二分的,之後如果暴力o(nmlog1e6)就是50分。
但我們顯然不用暴力,這裡我們可以先預掃一遍陣列,並用字首和存w和v,之後再乙個o(m)暴力判斷就可以了。
和大於標準時加大l以加大mid,小於時減少r。
並一定要注意l和r的初始大小,l為所有值中最小-1雖然貌似不減也可以過,r為最大值+1。
#includeusing namespace std;
const int maxn=200010;
int w[maxn],v[maxn],l[maxn],r[maxn];
long long pre_n[maxn],pre_v[maxn];
long long y,s,sum;
int n,m,mx=-1,mn=2147483647;
bool check(int w)
for(int i=1;i<=m;i++)
y+=(pre_n[r[i]]-pre_n[l[i]-1])*(pre_v[r[i]]-pre_v[l[i]-1]);
sum=llabs(y-s);
if(y>s) return true;
else return false;
}int main()
for(int i=1;i<=m;i++)
scanf(" %d %d",&l[i],&r[i]);
int left=mn-1,right=mx+2,mid;
long long ans=999999999999999;
while(left<=right)
printf("%lld",ans);
return 0;
}
聰明的質監員
noip2011 day2 t2 題目描述 小 t 是一名質量監督員,最近負責檢驗一批礦產的質量。這批礦產共有n 個礦石,從1到n 逐一編號,每個礦石都有自己的重量wi 以及價值vi。檢驗礦產的流程是 見圖 若這批礦產的檢驗結果與所給標準值s 相差太多,就需要再去檢驗另一批礦產。小t不想費時間去檢驗...
聰明的質監員
字首和 二分答案的一道好題。不難看出這個w和礦石的重量是有關係的。礦石的重量的最大值和最小值可以記錄出來,這樣w便有界。根據題意w所在區間顯然可以單調,所以可以使用二分進行求解。我們二分w,然後去計算以這個w為答案的值與標準值相比較。二分的check函式用字首和維護就可以。通常的做法是開兩個陣列,乙...
聰明的質監員題解
原題 洛谷p1314 題解 這道題屬於典型的二分 w越小,y越大那麼就直接做就完事了唄。注意一下幾點 1.開long long 2.使用字首和,否則可能會超時 include using namespace std int n,m,w 200005 v 200005 l 200005 r 20000...