老板给度度熊分配了个工作,第个工作需要耗费单位时间,每个工作必须老板给定的限制时间前完成。
度度熊从时刻开始工作,在同一时间度度熊手上只能做一件工作,度度熊想知道他是否能把所有工作都完成呢?
第一行一个数表示数据组数。
每组数据第一行一个数。
接下来行每行两个数表示,。
每组数据输出一行,如果度度熊能完成他的工作输出"Yes"不然输出“No”。
1 5 2 4 1 9 1 8 4 9 3 12
Yes
从前往后依次做每个工作即可完成。
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main(){ int k=0; cin>>k; for(int i=0;i<k;i++){ int n=0; cin>>n; vector<pair<int,int>> a; for(int j=0;j<n;j++){ int x=0,y=0; cin>>x>>y; a.push_back({x,y}); } sort(a.begin(),a.end(),[](pair<int,int> x1,pair<int,int> x2){ if(x1.second==x2.second) return x1.first<x2.first; return x1.second<x2.second; }); int time=0; int j=0; for(;j<n;j++){ time+=a[j].first; if(time>a[j].second) break; } if(j==n) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; }
// JavaScript - V8 let circle = parseInt(readline()) while(circle--) { let flag = true let nums = parseInt(readline()) while(nums--) { let arr = (readline()).split(' ') if(parseInt(arr[0]) > parseInt(arr[1])) { flag = false } } if (flag) { console.log('Yes') } else { console.log('No')} }
bool baidu(multimap<int,int>mp) { int time=0; for(auto x:mp) { time+=x.second; if(x.first<time) return false; } return true; } int main() { int n,m,k; cin>>n; vector<bool>ans; for(int i=0;i<n;i++) { cin>>m; multimap<int,int>mp; for(int j=0;j<m;j++) { int a,b; cin>>a;cin>>b; mp.insert(make_pair(b,a)); } ans.push_back(baidu(mp)); } for(auto x:ans) { if(x) cout<<"YES"<<endl; else cout<<"NO"<<endl; } }利用mulitmap按key值排序 用bi作key ai作value 自测能过但是用例一个都不通过 求大神指点
#include<iostream> #include<algorithm> #include<bits/stdc++.h> using namespace std; typedef struct node{ int a; int b; node(int a1,int b1){ a=a1; b = b1; } }nodes,*pnode; bool cmp(pnode n1,pnode n2){ return n1->b<n2->b; } int main(){ int n; cin>>n; //cin>>k; while(n>0){ int k=0; cin>>k; vector<pnode> nodes; for(int i=0;i<k;i++){ int a,b; cin>>a>>b; pnode temp = new node(a,b); nodes.push_back(temp); } //全部的工作 sort(nodes.begin(),nodes.end(),cmp);//时间从小到大 //遍历 int sumtime =0; bool flage = true; for(auto nn:nodes){ sumtime+=(nn->a); //cout<<sumtime<<"----"<<endl; if(sumtime>(nn->b)){ cout<<"No"<<endl; flage = false; break; } } if(flage){ cout<<"Yes"<<endl; } //清空 n--; } return 0; }
# 排序后进行加和时间复杂度过高 g = int(input()) for _ in range(g): tasks = int(input()) ddl = [] for i in range(tasks): t, d = map(int, input().split()) ddl.append([t, d]) ddl.sort(key = lambda x: x[1]) res = 0 for time, deadline in ddl: if res + time > deadline: print("No") else: res += time print("Yes")