Codeforces Round #481 (Div. 3) G. Petya's Exams (贪心,模拟)
Posted lr599909928
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #481 (Div. 3) G. Petya's Exams (贪心,模拟)相关的知识,希望对你有一定的参考价值。
-
题意:你有(n)天的时间,这段时间中你有(m)长考试,(s)表示宣布考试的日期,(d)表示考试的时间,(c)表示需要准备时间,如果你不能准备好所有考试,输出(-1),否则输出你每天都在干什么,如果这一天你有考试,输出(m+1),如果你要准备第(i)场考试,输出(i),否则休息,输出(0).
-
题解:数据范围小,直接模拟,但我们需要先贪心,即每次都要先准备最早的考试,然后直接写两个(for)循环就行了.
-
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <stack> #include <queue> #include <vector> #include <map> #include <set> #include <unordered_set> #include <unordered_map> #define ll long long #define fi first #define se second #define pb push_back #define me memset const int N = 1e6 + 10; const int mod = 1e9 + 7; const int INF = 0x3f3f3f3f; using namespace std; typedef pair<int,int> PII; typedef pair<long,long> PLL; int n,m; struct S{ int s,d,c; }p[N]; int ans[N]; int main() { ios::sync_with_stdio(false);cin.tie(0); cin>>n>>m; for(int i=1;i<=m;++i){ cin>>p[i].s>>p[i].d>>p[i].c; } for(int i=1;i<=n;++i){ int cnt=-1; int mi=n+1; for(int j=1;j<=m;++j){ if(p[j].d==i) ans[i]=m+1; if(p[j].s<=i && p[j].d>i && p[j].c>0 && (p[j].d<mi)){ mi=p[j].d; cnt=j; } } if(ans[i]==0 && cnt!=-1) ans[i]=cnt,p[cnt].c--; } for(int i=1;i<=m;++i){ if(p[i].c>0){ puts("-1"); return 0; } } for(int i=1;i<=n;++i){ printf("%d ",ans[i]); } return 0; }
以上是关于Codeforces Round #481 (Div. 3) G. Petya's Exams (贪心,模拟)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #481 (Div. 3)
Codeforces Round #481 (Div. 3) C. Letters
Codeforces Round #481 (Div. 3) F. Mentors
Codeforces Round #481 (Div. 3) D. Almost Arithmetic Progression