CF1776D Teamwork
caizhetong · · 题解
题目简述
有三个人和
解决方案
枚举在每个时间超级计算机会处理谁的难度为什么的题。优先做难题,优先选择做上到题的时间离现在近的人。
根据贪心思想若能做难题,则一定能做简单题,但能做简单题不一定能做难题,所以能做难题时要先做难题。设一个做上一道题的时间距离现在近的人为
代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
long long a,b,c,l,cnt;
struct gz{
long long l,id;
}t[10];
struct tx{
long long a,b,c;
}ans[1000010];
bool px(gz a,gz b)
{
if(a.l>b.l) return true;
if(a.l<b.l) return false;
return false;
}
signed main()
{
//freopen("ti.in","r",stdin);
//freopen("ti.out","w",stdout);
//ios::sync_with_stdio(0);
cin>>a>>b>>c>>l;t[1].id=1;t[2].id=2;t[3].id=3;
for(int i=1;i<=l;i++)
{
sort(t+1,t+4,px);
int tag=0;
if(c!=0)
{
for(int j=1;j<=3;j++)
{
if(i-4>=t[j].l)
{
c--;cnt++;
ans[cnt].a=t[j].id;
ans[cnt].b=i-4;
ans[cnt].c=i;
t[j].l=i;tag=1;
break;
}
}
}
if(tag==1) continue;
if(b!=0)
{
for(int j=1;j<=3;j++)
{
if(i-3>=t[j].l)
{
b--;cnt++;
ans[cnt].a=t[j].id;
ans[cnt].b=i-3;
ans[cnt].c=i;
t[j].l=i;tag=1;
break;
}
}
}
if(tag==1) continue;
if(a!=0)
{
for(int j=1;j<=3;j++)
{
if(i-2>=t[j].l)
{
a--;cnt++;
ans[cnt].a=t[j].id;
ans[cnt].b=i-2;
ans[cnt].c=i;
t[j].l=i;
break;
}
}
}
}
cout<<cnt<<"\n";
for(int i=1;i<=cnt;i++) cout<<ans[i].a<<" "<<ans[i].b<<" "<<ans[i].c<<"\n";
//fclose(stdin);
//fclose(stdout);
return 0;
}