bzoj4590 二分 自動刷題機

2021-08-17 09:34:51 字數 1686 閱讀 1622

description

曾經發明了訊號增幅儀的發明家shtsc又公開了他的新發明:自動刷題機–一種可以自動ac題目的神秘裝置。自動

刷題機刷題的方式非常簡單:首先會瞬間得出題目的正確做法,然後開始寫程式,每秒,自動刷題機的**生成模 塊會有兩種可能的結果:

a.寫了x行**。 b.心情不好,刪掉了之前寫的y行**。(如果y大於當前**長度則相當於全部刪除。)

對於每個oj所有題目,存在某個固定的長度n>0。一旦自動刷題機在某秒結束時積累了大於等於n行的**,它就會

自動提交並ac此題,然後新建乙個檔案開始寫下一題。shtsc在某個oj上跑了一天的自動刷題機,得到了很多條關

於寫**的日誌資訊。他突然發現自己沒有記錄這個oj的n究竟是多少。所幸他通過自己在oj上的rank知道了機一

共切了k道題。希望你計算n可能的最小值和最大值。

input

第一行兩個整數l,k,表示刷題機的日誌一共有l行,一共了切了k題。

第二行l個整數,x1…xl。xi>=0表示寫了xi行**。xi<0表示刪除了這道題的-xi行**。

1<=l,k<=100000,|xi|<=10^9

output

輸出兩個數a,b。分別代表n可能的最小值和最大值。如果不存在這樣的n則輸出-1。

sample input

4 2

-3

sample output

3 7

hint

//樣例1:如果n=2那麼刷題機就會切掉3題。但如果n>7刷題機最多只能切1題。考慮n=4發生了什麼。

第一秒:刷題機寫了2行。

第二秒:刷題機又寫了5行,共有7行,提交,自信ac。

第三秒:刷題機刪掉了3行,共有0行。

第四秒:刷題機寫了9行,共有9行,提交,自信ac。

一共ac了兩題。

題解

水題

直接二分答案暴力check

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

int n,k;

ll a[110000];

int check(ll p)

}if(retreturn

0; else

if(ret==k)return

1; return2;}

int main()

else l=mid+1;

}l=1,r=1ll<<63-1;ll mx=-1;

while(l<=r)

else l=mid+1;

}if(mn==-1 || mx==-1)printf("-1\n");

else

printf("%lld %lld\n",mn,mx);

return

0;}

BZOJ4590 自動刷題機

比賽的時候想到了用二分 貪心,二分的部分與貪心的部分也寫對了,但是由於資料範圍未看沒有開long long,且二分左端點賦值過小導致wa掉 二分 的長度,貪心判斷能否達到,演算法上沒什麼好說的,主要是細節處理上 開long long 右端點資料可以開的盡量大一點 輸出 1的點要特別小心 includ...

BZOJ4590 自動刷題機

比賽的時候想到了用二分 貪心,二分的部分與貪心的部分也寫對了,但是由於資料範圍未看沒有開long long,且二分左端點賦值過小導致wa掉 二分 的長度,貪心判斷能否達到,演算法上沒什麼好說的,主要是細節處理上 開long long 右端點資料可以開的盡量大一點 輸出 1的點要特別小心 includ...

BZOJ 4590 Shoi2015 自動刷題機

bzoj 4590 shoi2015 自動刷題機 二分答案 曾經發明了訊號增幅儀的發明家shtsc又公開了他的新發明 自動刷題機 一種可以自動ac題目的神秘裝置。自動 刷題機刷題的方式非常簡單 首先會瞬間得出題目的正確做法,然後開始寫程式,每秒,自動刷題機的 生成模 塊會有兩種可能的結果 a.寫了x...