算法1
模拟+贪心
时间复杂度
n^2
C++ 代码
/*
贪心+模拟
task:
1.有attend,就招待
2.没有attend,有preorder就干,先干attend早的
3.没有attend,没有preorder就休息
*/
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
int n,m;
struct mode{
int preorder;
int attend;
int spendtime;
}p[105];
void solve()
{
vector<int> q;
for(int i=1;i<=n;i++)
{
int t=-1;//标记
for(int j=1;j<=m;j++)
{
if(i==p[j].attend&&!p[j].spendtime) {t = m+1;break;}
else if(i==p[j].attend&&p[j].spendtime) {cout<<-1<<endl;return;}
}
if(t == -1)
{
int cnt=0;
int num = 110;
for(int j=1;j<=m;j++)
{
if(i>=p[j].preorder&&p[j].spendtime)
{
if(num>p[j].attend){num=p[j].attend;cnt=j;}
}
}
p[cnt].spendtime --;
t = cnt;
}
if(t == -1)
{
t = 0;
}
q.push_back(t);
}
for(int i=0;i<q.size();i++) cout<<q[i]<<' ';
}
signed main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int a,b,c;
cin>>a>>b>>c;
p[i]={a,b,c};
}
solve();
return 0;
}