3.7百度测试岗二道算法题解
第一题:银行插队
用数组加队列模拟就可以了
#include <iostream> #include <algorithm> #include <map> #include <queue> #include <vector> using namespace std; vector< queue<int> > v(6); int main(){ int n; cin>>n; vector<int> res; while(n--){ char c; cin>>c; if(c=='a'){ int a,b; cin>>a>>b; //a序号,b是优先级 v[b].push(a); }else{ for(int i=1;i<=5;i++){ if(v[i].size()){ res.push_back(v[i].front()); v[i].pop(); break; } } } } return 0; }
第二题:魔法。
贪心,消耗多的带消耗少的
#include <iostream> #include <algorithm> #include <map> #include <queue> #include <vector> using namespace std; vector<int> v; int main(){ int n,k; cin>>n>>k; for(int i=0;i<n;i++){ int a; cin>>a; v.push_back(a); } int res=v[v.size()-1]; int dex=v.size()-k; for(int i=v.size()-k-1;i>=0;i--){ int t=v[i]+v[dex]; dex++; res=max(t,res); } cout<<res<<" "; return 0; }