問題 A 法師康的工人 模擬

2021-10-10 02:55:11 字數 1565 閱讀 6939

三個法師康的工人每天早上6點到工廠開始到三條產品生產線上組裝桔子手機。第乙個工人在200時刻開始(從6點開始計時,以秒作為單位)在生產線上開始生產,一直到1000時刻。第二個工人,在700時刻開始,在1100時刻結束。第三個工人從1500時刻工作到2100時刻。期間最長至少有乙個工人在生產線上工作的連續時間為900秒(從200時刻到1100時刻),而最長的無人生產的連續時間(從生產開始到生產結束)為400時刻(1100時刻到1500時刻)。

你的任務是用乙個程式衡量n個工人在n條產品線上的工作時間列表(1≤n≤5000,以秒為單位)。

·最長的至少有乙個工人在工作的時間段

·最長的無人工作的時間段(從有人工作開始計)

輸入第1行為乙個整數n,第2-n+1行每行包括兩個均小於1000000的非負整數資料,表示其中乙個工人的生產開始時間與結束時間。

輸出為一行,用空格分隔開兩個我們所求的數。

3

200 1000

700 1100

1500 2100

900 400

jesus!我手寫了從計蒜客ac了,然後從ojwa 75%這個?伺服器怎麼回事???

wa75%

#include#include#include#includeusing namespace std;

int main()

if(p[i].second>end)

end=p[i].second;

}printf("%lld %lld",contime,bretime);

return 0;

}

ac**

#include#include#include#includeusing namespace std;

int main()

{ int n;

cin>>n;

pairp[5500];

for(int i=0;i不知道參考的誰的了,更加簡潔了

longlongcontime=p[0].second-p[0].first;

longlongbretime=0;

for(inti=1,j=0;iif(p[i].first <=p[j].second)//只有p[i].first小於p[j].second的時候才進來

p[j].second = max(p[i].second,p[j].second);//找更長的second

contime= max(contime,p[j].second-p[j].first);//contime=更大的second-第乙個下標的first

else

bretime=max(bretime,p[i].first-p[j].second);

j=i;//j記錄著此段第乙個的下標

4 3 法師康工人 貪心

題目 三個法師康的工人每天早上6點到工廠開始到三條產品生產線上組裝桔子手機。第乙個工人在200時刻開始 從6點開始計時,以秒作為單位 在生產線上開始生產,一直到1000時刻。第二個工人,在700時刻開始,在1100時刻結束。第三個工人從1500時刻工作到2100時刻。期間最長至少有乙個工人在生產線上...

關於全排列問題的總結(康托展開)

今天做usaco上一道題的時候用到了這個東西,當時覺得麻煩直接用map寫了,然後仔細研究了一下,康托展開與其逆展開,個人覺得會在節省空間和表示狀態上有比較大的幫助。先來正展開吧,即給定排列序列,求是第幾個排列,看序列中的第k位,假設序列長度為n,那麼,k位之後的各位數全排列有 n k 種,然後看k之...

js模擬ctrl c的問題

1.這種方式只可以對顯示的textbox和textarea使用,對於display none和visibility hidden 以及其他標籤無效 var message document.getelementbyid compcode240 message.select 選擇物件 document...