• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            pku 1209 Calendar 歷法問題,超多trick

            簡要題意:
            給出1900-1999 年中任一一年的事件,(d.m.p),分別表示日、月、重要度(提前p天需要通知)。然后給出n個時間點(diǎn),要求輸出需要提醒的日期。排序規(guī)則很詭異(與官 方測試數(shù)據(jù)不同),引poj的discuss:先是按時間排,時間相同就看是不是今天,是今天就只管輸入順序,不是今天就先考慮星星的問題再來輸入順序。

            我的解法:
            將事件看做區(qū)間,開一個366的二維數(shù)組或者vector,來記錄覆蓋每個時間點(diǎn)的事件。然后對每個數(shù)組按照上述排序規(guī)則進(jìn)行排序。
            輸出的時候有點(diǎn)詭異,所有的時間輸出采取右對齊并占3字節(jié)。
            還有個更詭異的,時期會套圈。。。(感覺和題意描述有點(diǎn)區(qū)別),就是說,如果輸出12.31號需要提醒的事件,那么需要考慮1月份的,然后排序的時候1月份還要排在后面。。。。

            代碼:
              1 Source Code
              2 Problem: 1209        User: yzhw
              3 Memory: 616K        Time: 0MS
              4 Language: G++        Result: Accepted
              5 
              6     * Source Code
              7 
              8       # include <cstdio>
              9       # include <vector>
             10       # include <cstring>
             11       # include <string>
             12       # include <algorithm>
             13       using namespace std;
             14       struct node
             15       {
             16           int t,r,id,d,m;
             17           char name[255];
             18           bool operator<(const node &pos) const
             19           {
             20               if(t!=pos.t) return t<pos.t;
             21               else if(r!=pos.r) return r>pos.r;
             22               else return id<pos.id;
             23           }
             24       };
             25       vector<node> day[400];
             26 
             27       int main() {
             28       //    freopen("c.in","r",stdin);
             29       //    freopen("ans.txt","w",stdout);
             30           int year,c=0;
             31           scanf("%d",&year);
             32           int time[13];
             33           time[0]=0;
             34           for(int i=1;i<=12;i++)
             35               if(i<=7&&i%2||i>7&&!(i%2))
             36                   time[i]=31;
             37               else
             38                   time[i]=30;
             39           if(year%4==0)
             40               time[2]=29;
             41           else
             42               time[2]=28;
             43           for(int i=2;i<=12;i++)
             44               time[i]+=time[i-1];
             45           bool flag=false;
             46           while(true)
             47           {
             48               char jud[5];
             49               scanf("%s",jud);
             50               if(jud[0]=='#'break;
             51               else if(jud[0]=='A')
             52               {
             53                   int d,m,l;
             54                   scanf("%d%d%d",&d,&m,&l);
             55                   char str[300];
             56                   gets(str);
             57                   while(str[0]==' ')
             58                       for(int i=0;i<strlen(str);i++)
             59                           str[i]=str[i+1];
             60                   for(int i=max(1,time[m-1]+d-l);i<=time[m-1]+d;i++)
             61                   {
             62                       node tmp;
             63                       strcpy(tmp.name,str);
             64                       tmp.id=c;
             65                       tmp.d=d;
             66                       tmp.m=m;
             67                       if(i!=time[m-1]+d)
             68                          tmp.r=l-(time[m-1]+d-i-1);
             69                       else
             70                          tmp.r=8;
             71                       tmp.t=time[m-1]+d;
             72                       day[i].push_back(tmp);
             73                   }
             74 
             75                   for(int i=time[12]+time[m-1]+d-l;i<=time[12];i++)
             76                   {
             77                       node tmp;
             78                       strcpy(tmp.name,str);
             79                       tmp.id=c;
             80                       tmp.d=d;
             81                       tmp.m=m;
             82                       tmp.r=l-(time[m-1]+d-1+time[12]-i+1-1);
             83                       tmp.t=time[m-1]+d+time[12];
             84                       day[i].push_back(tmp);
             85                   }
             86                   c++;
             87               }
             88               else
             89               {
             90                   if(!flag)
             91                   {
             92                       flag=true;
             93                       for(int i=0;i<=time[12];i++)
             94                           sort(day[i].begin(),day[i].end());
             95                   }
             96                   int d,m;
             97                   scanf("%d%d",&d,&m);
             98                   printf("Today is:%3d%3d\n",d,m);
             99                   for(int i=0;i<day[time[m-1]+d].size();i++)
            100                   {
            101                      printf("%3d%3d ",day[time[m-1]+d][i].d,day[time[m-1]+d][i].m);
            102                      if(day[time[m-1]+d][i].t==time[m-1]+d) printf("*TODAY*");
            103                      else
            104                      {
            105                        for(int j=0;j<day[time[m-1]+d][i].r;j++)
            106                            printf("*");
            107                        for(int j=day[time[m-1]+d][i].r+1;j<8;j++)
            108                            printf(" ");
            109                      }
            110                      printf(" %s\n",day[time[m-1]+d][i].name);
            111                   }
            112                   printf("\n");
            113               }
            114           }
            115           return 0;
            116       }
            117 
            118 

            posted on 2010-11-26 20:38 yzhw 閱讀(224) 評論(0)  編輯 收藏 引用 所屬分類: data struct

            <2011年3月>
            272812345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            導(dǎo)航

            統(tǒng)計(jì)

            公告

            統(tǒng)計(jì)系統(tǒng)

            留言簿(1)

            隨筆分類(227)

            文章分類(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            久久91精品久久91综合| 久久久久无码中| 亚洲AV无码1区2区久久| 国产精品久久久福利| 色8激情欧美成人久久综合电| 香蕉久久AⅤ一区二区三区| 久久婷婷五月综合色高清| 久久精品国产亚洲精品| 精品久久久久中文字幕日本| 精品无码久久久久久久久久 | 久久综合九色综合久99| 久久成人精品| 99久久久精品免费观看国产| 久久精品国产亚洲精品| 国产欧美一区二区久久| 99精品久久久久久久婷婷| 狠狠精品久久久无码中文字幕| 亚洲精品国精品久久99热一| 久久国产成人| 久久国产成人精品麻豆| 国产69精品久久久久9999APGF| 精品久久久无码中文字幕天天| 国产精品99久久99久久久| 久久99精品国产麻豆宅宅| 日批日出水久久亚洲精品tv| 久久线看观看精品香蕉国产| 日韩精品久久无码中文字幕| 国产69精品久久久久APP下载| 久久久久亚洲AV无码去区首| 中文字幕成人精品久久不卡 | 久久人人爽人人爽人人片AV东京热| 国产巨作麻豆欧美亚洲综合久久| 精品综合久久久久久888蜜芽| 欧美日韩久久中文字幕| 久久无码国产专区精品| 中文精品99久久国产 | 99久久国产热无码精品免费久久久久| 久久香蕉超碰97国产精品| 久久水蜜桃亚洲av无码精品麻豆| 亚洲精品无码专区久久久| 99久久精品免费看国产一区二区三区|