【CCF例年問題解決】201709-2公共鍵箱【シミュレーション】


構造を定義します.まず入力をこのような構造の要素に変換してから、並べ替えてから順番に処理すればいいです.
#include 
#include 

using namespace std;

const int N = 1010;

typedef pair<int,pair<int,int>> PIII; // >  :0, 1

int n,k;
vector<PIII> list;
int st[N]; //    int

int main()
{
     
    cin >> n >> k;
    for(int i=1;i<=n;i++) st[i] = i;
    
    while(k -- )
    {
     
        int w,s,c;
        cin >> w >> s >> c; //   ,    ,    
        list.push_back({
     s,{
     1,w}});
        list.push_back({
     s + c,{
     0,w}});
    }
    
    sort(list.begin(),list.end());
    
    for(auto c : list)
    {
     
        int time = c.first, type = c.second.first, num = c.second.second;
        
        if(type == 0){
      //  
            for(int i = 1;i<=n;i++)
                if(!st[i]) {
     
                    st[i] = num;
                    break;
                }
        }
        else{
      //  ,      
            for(int i =1;i<=n;i++) 
                if(st[i] == num){
     
                    st[i] = 0;
                    break;
                }
        }
        
        //printf("%d %d %d
",time,type,num);
// for(int i=1;i<=n;i++) cout << st[i] << " "; // cout << endl; } for(int i=1;i<=n;i++) cout << st[i] << " "; return 0; }