• German Collegiate Programming Contest 2013:B


    一个离散化的简单题;

    我用的是STL来做的离散化;

    好久没写离散化了,纪念一下!

    代码:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<vector>
     4 #include<algorithm>
     5 #define maxn 5005
     6 using namespace std;
     7 vector<int>ve;
     8 int mmb[12]={0,44640,84960,129600,172800,
     9 217440,260640,305280,349920,393120,437760,480960};
    10 struct node
    11 {
    12     int st,end;
    13 }no[maxn];
    14 
    15 char s[10];
    16 int lisan[maxn*2];
    17 
    18 int main()
    19 {
    20     int t,year,month,day,hour,min,m,n,mi;
    21     scanf("%d",&t);
    22     while(t--)
    23     {
    24         ve.clear();
    25         scanf("%d%d",&n,&m);
    26         for(int i=0; i<n; i++)
    27         {
    28             scanf("%s",&s);
    29             scanf("%d-%d-%d",&year,&month,&day);
    30             scanf("%d:%d",&hour,&mi);
    31             if(year==2016&&month>2)
    32             no[i].st=(year-2013)*525600+mmb[month-1]+(day-1)*1440+hour*60+mi+1440;
    33             else no[i].st=(year-2013)*525600+mmb[month-1]+(day-1)*1440+hour*60+mi;
    34             ve.push_back(no[i].st);
    35             scanf("%d-%d-%d",&year,&month,&day);
    36             scanf("%d:%d",&hour,&mi);
    37             if(year==2016&&month>2)
    38             no[i].end=(year-2013)*525600+mmb[month-1]+(day-1)*1440+hour*60+mi+m+1440;
    39             else no[i].end=(year-2013)*525600+mmb[month-1]+(day-1)*1440+hour*60+mi+m;
    40             if(no[i].end==no[i].st)
    41             ve.push_back(no[i].end+1);
    42             else ve.push_back(no[i].end);
    43         }
    44         sort(ve.begin(),ve.end());
    45         ve.erase(unique(ve.begin(),ve.end()),ve.end());
    46         memset(lisan,0,sizeof lisan);
    47         for(int i=0; i<n; i++)
    48         {
    49             int pos=lower_bound(ve.begin(), ve.end(),no[i].st)-ve.begin();
    50             lisan[pos]+=1;
    51             pos=lower_bound(ve.begin(), ve.end(),no[i].end)-ve.begin();
    52             lisan[pos]+=-1;
    53         }
    54         int mii=0;
    55         for(int i=0; i<ve.size(); i++)
    56             if(i>0)
    57                 lisan[i]+=lisan[i-1];
    58         for(int i=0; i<ve.size(); i++)
    59             if(lisan[i]>mii)mii=lisan[i];
    60         printf("%d
    ",mii);
    61     }
    62     return 0;
    63 }
    View Code

  • 相关阅读:
    找水王
    哈利波特图书购买问题
    中序线索化二叉树[C语言实现及注释]
    第一篇随文。
    理解Python函数中的的return
    记录一款实时同步的软件——Lsyncd
    for循环
    while循环
    文件操作
    我的第一个博客
  • 原文地址:https://www.cnblogs.com/yours1103/p/3379159.html
Copyright © 2020-2023  润新知