BZOJ 4590 Shoi2015 自動刷題機

2022-04-30 03:15:10 字數 1571 閱讀 9095

bzoj_4590_[shoi2015]自動刷題機_二分答案

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

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

塊會有兩種可能的結果:

a.寫了x行**。

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

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

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

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

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

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

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

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

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

4 225-3

93 7

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

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

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

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

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

一共ac了兩題。

二分答案x,然後求範圍的兩端即可,然而難點在輸出-1。

可能是無論n多小或無論多大都不能得到k,需要判斷l和r跟邊界的關係。

也可能是不存在這樣的n使得正好得到k,需要判斷範圍的左端點是否大於右端點。

**:

#include #include #include using namespace std;

typedef long long ll;

#define n 100050

#define inf (1ll<<60)

int n,k,a[n];

ll ans1;

int check(ll x)

}else

}return re;

}int main()

ll l=1,r=inf;

while(l>1ll;

if(check(mid)>k) l=mid+1;

else r=mid;

}ans1=l;

if(l==inf)

l=1,r=inf;

while(l>1ll;

if(check(mid)>=k) l=mid+1;

else r=mid;

}if(ans1>l-1) puts("-1");

else printf("%lld %lld\n",ans1,l-1);

}

BZOJ4590 Shoi2015 自動刷題機

分析 這道題很噁心.那個 1卡了我一會兒,其他的部分很簡單。我們能夠看出,解題個數和n相關,並且形成不下降序列,那麼我們可以二分找到第乙個滿足解題數為k和最後乙個滿足解題數為k的位置 判斷兩件事,1 check 1 k 2 ans1 ans2 附上 include include include i...

Bzoj3562 神器化合物 Shoi 2014

ac通道 分析 若把每乙個原子看作乙個節點,將化學鍵看作一條邊,那麼這個題目要求的 分子的個數 很容易就可以看出是求圖中聯通塊的個數。求聯通塊的個數,可以使用並查集。可如何求出每一步的聯通塊的個數呢?可以知道,當連上一條邊時,若此邊連線的是兩個不同的聯通塊,那麼分子個數就會減一 當刪去一條邊時,若刪...

BZOJ4590 自動刷題機

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