zoukankan      html  css  js  c++  java
  • ccf-170902-公共钥匙盒(模拟)

    这是一道典型的模拟题 

    首先我们把借钥匙和还钥匙切分成两个事件 保存于两个数组中 

    然后我对还钥匙的活动按照时间发生次序和还得钥匙序号排序,即按照题意对事件发生的次序排序

    最后按照时间的进行 一个一个进行活动的发生就ok啦

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <cstring>
     4 #include <cstdio>
     5 using namespace std;
     6 struct T {
     7     int id;
     8     int _time;
     9 };
    10 const int N=1000+7;
    11 int x[N],p[N];// x 模拟钥匙盒 x[i]=j 表示i位置放置j x[i]=0表示空
    12               // p[i]=j  i钥匙放置的位置是j
    13 T t1[N],t2[N];// t1[] 表示 要借钥匙的请求 (id和时间) 
    14              //  t2[] 表示  要还的钥匙序号和时间 
    15 int n1,n2;//  n1 表示下一个要借的钥匙
    16           //  n2 表示下一个要还的钥匙
    17 int n,k;
    18 bool cmp (T a, T b) {// 时间第一关键字 序号第二关键字
    19     if (a._time==b._time)
    20         return a.id<b.id;
    21     return a._time<b._time;
    22 }
    23 void re ( int id ) {// 找到第一个空位置还书
    24     for (int i=1;i<=n;i++)  
    25         if (x[i]==0) {
    26             x[i]=id;
    27             p[id]=i;
    28             break;
    29         }
    30     return ;
    31 }
    32 int main ()
    33 {
    34     scanf ("%d %d",&n,&k);
    35     for (int i=1;i<=n;i++) 
    36         x[i]=p[i]=i;
    37     for (int i=1;i<=k;i++) {
    38         int w,s,c;
    39         scanf ("%d %d %d",&w,&s,&c);
    40         T x1={w,s}; t1[i]=x1;
    41         T x2={w,s+c}; t2[i]=x2;
    42     }
    43     sort (t1+1,t1+1+k,cmp); n1=1;
    44     sort (t2+1,t2+1+k,cmp); n2=1;
    45     int _start=t1[1]._time;
    46     int _end=t2[k]._time;
    47     for (int i=_start;i<=_end;i++) {// 模拟时间的进行,进行活动的发生 
    48         while (n2<=k&&t2[n2]._time==i)  { re (t2[n2].id); n2++; }  //同一时间先还
    49         while (n1<=k&&t1[n1]._time==i)  { int pos=p[t1[n1].id]; x[pos]=0; n1++;}
    50     }
    51     for (int i=1;i<=n;i++)
    52         printf ("%d ",x[i]);
    53     printf ("
    ");
    54     return 0;
    55 }
    抓住青春的尾巴。。。
  • 相关阅读:
    Java的基本数据类型及其封装类
    牛客寒假3-A |dp走格子
    牛客寒假1-I nico和niconiconi| 字符串 线性dp
    牛客寒假2-C算概率| 概率dp
    牛客寒假6-B重排列| dp计数
    牛客寒假6-B图| 统计环中结点个数,计算最大链长
    三分法 求最大值最小|牛客寒假5-B牛牛战队的比赛地
    P3382|三分法模板
    思维题(取模)| CF#615Div3 D.MEX maximizing
    树的直径| CF#615Div3 F. Three Paths on a Tree
  • 原文地址:https://www.cnblogs.com/xidian-mao/p/8524817.html
Copyright © 2011-2022 走看看