刷題總結 work(ssoj)

2022-05-23 13:12:09 字數 2012 閱讀 2911

source:noip2015-shy-5

假設現在離 noip 還有 m 天,有 n 個人要去參加比賽。他們每個人都有乙個預定的訓練量 r[i] ,所以每一天他們都抓緊時間練習。但是由於條件限制,第 i 天只有 t[i] 的時間可以練習。

我們都知道,乙個人在開始幹活以前總要浪費一些時間做一些雜七雜八的事情。現在我們假定第 i 個人每天在訓練前浪費的時間是固定的,記為 d[i] 。這段浪費掉的時間過後,選手會專心致志訓練,他們會充分利用剩下的時間。然而乙個可能的情況時,乙個人還在無所事事的時候,某一天的訓練時間已經過去了,所以他那一天什麼事情都沒有做。

現在請問每個人在第幾天的時候可以完成自己的訓練任務。當然會存在志向遠大但是很懶惰的人到最後也是做不完的情況。

第一行兩個整數 n,m ,表示人數和天數 。

接下來一行 m 個整數 t[i] 。

接下來 n 行每行兩個整數 d[i],r[i] 。

一行輸出 n 個整數表示每個人在第幾天可以完成自己的工作,如果完不成,輸出 0 。

輸入  [複製]

3 3 

4 2 5 

1 3 

2 5 

3 4

輸出

1 3 0

【資料範圍】

對 30% 的輸入資料 :1≤n,m≤1000 

對 100% 的輸入資料 :1≤n,m≤ 200000;1≤t[i]≤1000000; 0≤d[i]≤1000000;1≤r[i]≤1000000

【注意事項】

如果某人浪費的時間超過一天,不需減去負的時間

本來想用二分套主席樹寫的·····

然而tmt了一下午棄療了···

正解應該是將每天的訓練時間按t為關鍵字降序排序···將每個人按其耽誤時間d為關鍵字降序排序·····這樣做是為了消除當人的浪費時間超過某一天時帶來的影響·····

然後按照排好的序開始列舉對應的人···將t大於這個人r的訓練天數加入兩個樹狀陣列··乙個儲存總時間乙個儲存總天數·····然後對這個人二分答案即可···

#include#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int n=2e5+5

;struct

node1

train[n];

struct

node2

peo[n];

intn,m,ans[n];

inline

intr()

inline

bool

cmp1(node1 a,node1 b)

long

long

trsum[n],trcnt[n];

inline

bool

cmp2(node2 a,node2 b)

inline

void insertsum(int pos,int

v)inline

void insertcnt(int

pos)

inline

long

long querysum(int

pos)

inline

int querycnt(int

pos)

inline

bool check(int x,int

now)

intmain()

int le=1,ri=m,anss=0

;

while(le<=ri)

ans[peo[i].person]=anss;

} for(int i=1;i<=n;i++) cout<"";

return0;

}

筆試刷題總結

今天刷了一些筆試題,以下是刷完筆試題後看到的相關知識點的解析,做個小結。1 多型主要以兩種形式,靜態多型和動態多型,靜態多型主要實現了函式過載和運算子過載。動態多型主要實現了虛函式。虛函式是動態聯編,程式在執行的過程中確定呼叫哪乙個函式。2 int s 8 定義乙個指標陣列,該陣列中每個元素是乙個指...

Java刷題總結

public class hasstatic a.程式通過編譯,輸出結果為 x 102 b.程式通過編譯,輸出結果為 x 103 c.10行不能通過編譯.因為x星私有靜態變數 d.5行不能通過編譯.因為引用了私有靜態變數 解析 同乙個類內,private變數可以訪問,所以cd錯。由於x是static...

LeetCode刷題總結

123 4567 891011 12 元素交換 swap a 1 a 3 sort排序 sort a.begin a.end 陣列顛倒 reverse a.begin a.end 陣列元素置為0 memset a,0,a.size 陣列取值 a.push back 定義二維陣列 vector vec...