如何将【解题报告】Task改写为一个长尾词?
- 内容介绍
- 文章标签
- 相关推荐
本文共计449个文字,预计阅读时间需要2分钟。
【解题报告】Task:任务问题:问题解题思路:贪心我们可以为每个任务设定一个优先级,优先级由任务的等级和所需时间共同决定。具体步骤如下:
1.为每个任务计算优先级,优先级=等级 * 时间
2.按照优先级对任务进行排序
3.从优先级最高的任务开始执行,直到所有任务完成
AC代码:
Task
题目:任务
解题思路:
贪心
我们可以贪心每个任务的等级,再贪心每个任务的时间,我们这样排一下序,再循环一下,就可以得到正确的答案了
AC代码
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; const long long maxn=100010; long long n,m; struct task { long long x; long long y; }; task f[maxn]; task e[maxn]; long long cnt[105],ans,num; long long cmp(task a,task b) { if(a.x==b.x) return a.y>b.y; return a.x>b.x; } int main() { cin>>n>>m; for(long long i=1;i<=n;i++) cin>>e[i].x>>e[i].y; for(long long i=1;i<=m;i++) cin>>f[i].x>>f[i].y; sort(e+1,e+1+n,cmp); sort(f+1,f+1+m,cmp); long long j=1; for(long long i=1;i<=m;i++) { while(j<=n&&e[j].x>=f[i].x) { cnt[e[j].y]++; j++; } for(long long k=f[i].y;k<=100;k++) { if(cnt[k]) { num++; cnt[k]--; ans+=500*f[i].x+2*f[i].y; break; } } } cout<<num<<" "<<ans<<endl; return 0; }
PS:实在不懂为什么别人的代码要用pair
本文共计449个文字,预计阅读时间需要2分钟。
【解题报告】Task:任务问题:问题解题思路:贪心我们可以为每个任务设定一个优先级,优先级由任务的等级和所需时间共同决定。具体步骤如下:
1.为每个任务计算优先级,优先级=等级 * 时间
2.按照优先级对任务进行排序
3.从优先级最高的任务开始执行,直到所有任务完成
AC代码:
Task
题目:任务
解题思路:
贪心
我们可以贪心每个任务的等级,再贪心每个任务的时间,我们这样排一下序,再循环一下,就可以得到正确的答案了
AC代码
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; const long long maxn=100010; long long n,m; struct task { long long x; long long y; }; task f[maxn]; task e[maxn]; long long cnt[105],ans,num; long long cmp(task a,task b) { if(a.x==b.x) return a.y>b.y; return a.x>b.x; } int main() { cin>>n>>m; for(long long i=1;i<=n;i++) cin>>e[i].x>>e[i].y; for(long long i=1;i<=m;i++) cin>>f[i].x>>f[i].y; sort(e+1,e+1+n,cmp); sort(f+1,f+1+m,cmp); long long j=1; for(long long i=1;i<=m;i++) { while(j<=n&&e[j].x>=f[i].x) { cnt[e[j].y]++; j++; } for(long long k=f[i].y;k<=100;k++) { if(cnt[k]) { num++; cnt[k]--; ans+=500*f[i].x+2*f[i].y; break; } } } cout<<num<<" "<<ans<<endl; return 0; }
PS:实在不懂为什么别人的代码要用pair

