牛牛找工作(C++網易)(代碼未通過:)

解題思路:

(1)使用map,將難度作爲key,報酬作爲value,按照難度從小到大的順序排序

(2)使用map,將人的能力按照從小到大的順序排序,key是能力值,value是原始輸入的位置

(3)使用雙指針,遵循前面人能夠取得的報酬,後面的人也一定能夠取得的原則移動移動指針

(4)看了下沒有通過的測試用例,說是10000份工作,結果只有三四十份工作,也就是數據中很多空行

(5)emmm,能力不足的我解決不了這個問題。。。。。。

#include <iostream>
#include <vector>
#include <map>
using namespace std;

int main() {
    int N,M,di,pi,ai;
    map<int,int> mpn,mpm;
    cin>>N>>M;
    for(int i=0;i<N;i++) {
        cin>>di>>pi;
		mpn[di]=pi;
    }
    for(int i=0;i<M;i++) {
        cin>>ai;
        mpm[ai]=i;
    }
	int *v = new int[M];
	auto&& itn=mpn.begin(),itm=mpm.begin();
	int maxs = itn->second;
	while(itn!=mpn.end()&&itm!=mpm.end()) {
	    while(itn!=mpn.end()&&itm->first>=itn->first) {
		if(itn->second>maxs) maxs = itn->second;
		    itn++;
		}
	    v[itm->second]=maxs;
	    itm++;
	}
	
	for(int i=0;i<M;i++) cout<<v[i]<<endl;
	delete []v;

    return 0;
}

/*
3 3 
1 100 
10 1000
1000000000 1001 
9 10 1000000000
*/

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章