日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

信息学奥赛一本通 1233:接水问题 | 1950:【10NOIP普及组】接水问题 | OpenJudge NOI 1.9 15 | 洛谷 P1190 [NOIP2010 普及组] 接水问题

發(fā)布時(shí)間:2025/3/17 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 信息学奥赛一本通 1233:接水问题 | 1950:【10NOIP普及组】接水问题 | OpenJudge NOI 1.9 15 | 洛谷 P1190 [NOIP2010 普及组] 接水问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【題目鏈接】

ybt 1233:接水問題
ybt 1950:【10NOIP普及組】接水問題
OpenJudge NOI 1.9 15:接水問題
洛谷 P1190 [NOIP2010 普及組] 接水問題

【題目考點(diǎn)】

1. 模擬

【解題思路】

接水順序確定,接水規(guī)則確定,整個(gè)接水流程就已經(jīng)確定了,不需要通過算法決定任何事情,這是一個(gè)考察模擬的題。
設(shè)數(shù)組time,time[i]表示第i個(gè)水龍頭可以使用的時(shí)刻。
time數(shù)組中最小值的下標(biāo)為mni,那么當(dāng)前情況下一定是第mni號(hào)水龍頭先給上一個(gè)人接完水后空了出來,下一個(gè)人就該在第mni號(hào)水龍頭接水。
假設(shè)第i人要接水,取time數(shù)組中最小值的下標(biāo)為mni,那么第x人就該在第mni個(gè)水龍頭接水,第mni號(hào)水龍頭的可以使用時(shí)刻增加wiw_iwi?,即time[mni] += w[i];
遍歷每個(gè)人,確定每個(gè)人接水的水龍頭位置,而后遍歷time數(shù)組,取其中的最大值,即為所有同學(xué)都接完水的時(shí)刻。
至于求最小值的過程,有兩種方法:

解法1:使用循環(huán)求最小值

整體復(fù)雜度為O(nm)O(nm)O(nm)

解法2:借助優(yōu)先隊(duì)列(堆)求最小值

整體復(fù)雜度為O(nlogm)O(nlogm)O(nlogm)

【題解代碼】

解法1:循環(huán)求最小值

#include <bits/stdc++.h> using namespace std; int main() {int n, m, w[10005], time[105] = {}, mx = 0;//time[i]:在第i個(gè)水龍頭接水結(jié)束的時(shí)間 cin >> n >> m;for(int i = 1; i <= n; ++i)cin >> w[i];for(int i = 1; i <= n; ++i){int mni = 1;//time中最小值的下標(biāo) for(int j = 1; j <= m; ++j)if(time[j] < time[mni])mni = j;time[mni] += w[i];//第mni水龍頭接水結(jié)束時(shí)間增加w[i] }for(int i = 1; i <= n; ++i)mx = max(mx, time[i]);cout << mx;return 0; }

解法2:使用優(yōu)先隊(duì)列求最小值

#include <bits/stdc++.h> using namespace std; struct Pair {int n, t;//n:水龍頭編號(hào) t:結(jié)束時(shí)間Pair(){}Pair(int a, int b):n(a),t(b){}bool operator < (const Pair &b) const{return b.t < t;//結(jié)束時(shí)間早更優(yōu)先 } }; int main() {priority_queue<Pair> pq;int n, m, w[10005], mni, mx = 0;cin >> n >> m;for(int i = 1; i <= n; ++i)cin >> w[i];for(int i = 1; i <= m; ++i)pq.push(Pair(i, w[i]));for(int i = m+1; i <= n; ++i)//已知m<=n {int mni = pq.top().n, t = pq.top().t;pq.pop();pq.push(Pair(mni, t + w[i]));//第mni水龍頭接水結(jié)束時(shí)間增加w[i]}while(pq.empty() == false){mx = max(mx, pq.top().t);pq.pop();}cout << mx;return 0; }

總結(jié)

以上是生活随笔為你收集整理的信息学奥赛一本通 1233:接水问题 | 1950:【10NOIP普及组】接水问题 | OpenJudge NOI 1.9 15 | 洛谷 P1190 [NOIP2010 普及组] 接水问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。