CCF 201709-2共通キーボックス(C++100点)
12715 ワード
この問題は非常に詳細を考慮しています.
1.主な考え方:鍵を返し、取り出すことを2つのイベントとして抽象化し、時間ノードによって遍歴する.
2.教師の入力属性が比較的に多く、構造体を設置することを考慮する.
3.読解問題には複数の先生が同時に鍵を返す可能性があるので、鍵番号順に小さい順から大きい順に返す必要があります.そうしないと、40点しか得られません.どうやって知ったのか聞かないでください.
1.主な考え方:鍵を返し、取り出すことを2つのイベントとして抽象化し、時間ノードによって遍歴する.
2.教師の入力属性が比較的に多く、構造体を設置することを考慮する.
3.読解問題には複数の先生が同時に鍵を返す可能性があるので、鍵番号順に小さい順から大きい順に返す必要があります.そうしないと、40点しか得られません.どうやって知ったのか聞かないでください.
#include
#include
using namespace std;
int n,k;
int key[1001];//
struct teacher//
{
int id;//
int b;//
int l;//
int e;//
}t[1001];
int main()
{
int max=0;
cin>>n>>k;
for(int i=0;i<k;i++)
{
cin>>t[i].id>>t[i].b>>t[i].l;
t[i].e=t[i].b+t[i].l;// +
if(t[i].e>max)
max=t[i].e;//max
}
for(int i=1;i<=n;i++)
{
key[i]=i;//
}
for(int i=1;i<=max;i++)
{
int c[1001];// ( , )
int cc=0;//
for(int j=0;j<k;j++)
{
if(t[j].e==i)//
{
c[cc]=t[j].id;// c[cc]
cc++;
}
}
sort(c,c+cc);//
for(int j=0;j<cc;j++)
{
for(int m=1;m<=n;m++)
{
if(key[m]==0)
{
key[m]=c[j];//
break;
}
}
}
for(int j=0;j<k;j++)
{
if(t[j].b==i)
for(int m=1;m<=n;m++)
{
if(key[m]==t[j].id)
key[m]=0;// ( ) 0, ,
}
}
}
for(int i=1;i<=n;i++)
{
cout<<key[i]<<" ";
}
return 0;
}