信息学奥赛一本通 1233:接水问题 | 1950:【10NOIP普及组】接水问题 | OpenJudge NOI 1.9 15 | 洛谷 P1190 [NOIP2010 普及组] 接水问题
【題目鏈接】
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 普及组] 接水问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java jre 1.6 32位_jre
- 下一篇: dbproviderfactories.