• <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個時間點,要求輸出需要提醒的日期。排序規(guī)則很詭異(與官 方測試數(shù)據(jù)不同),引poj的discuss:先是按時間排,時間相同就看是不是今天,是今天就只管輸入順序,不是今天就先考慮星星的問題再來輸入順序。

            我的解法:
            將事件看做區(qū)間,開一個366的二維數(shù)組或者vector,來記錄覆蓋每個時間點的事件。然后對每個數(shù)組按照上述排序規(guī)則進行排序。
            輸出的時候有點詭異,所有的時間輸出采取右對齊并占3字節(jié)。
            還有個更詭異的,時期會套圈。。。(感覺和題意描述有點區(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

            <2010年10月>
            262728293012
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            導(dǎo)航

            統(tǒng)計

            公告

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

            留言簿(1)

            隨筆分類(227)

            文章分類(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            久久精品国产免费一区| 精品久久久久中文字幕一区| 久久亚洲精品无码VA大香大香| 久久久久久综合网天天| 国产成人精品久久| 久久精品国产亚洲av麻豆小说 | 久久99精品国产一区二区三区| 亚洲欧美日韩精品久久| 狠狠色丁香婷婷综合久久来| 久久夜色精品国产www| 国产—久久香蕉国产线看观看 | 久久久久亚洲AV成人片| 久久国产精品无码网站| 日本精品久久久久中文字幕| 久久夜色tv网站| 亚洲精品国产字幕久久不卡| 国产69精品久久久久9999APGF | 欧美伊人久久大香线蕉综合| 夜夜亚洲天天久久| 久久久久久久久无码精品亚洲日韩| 日韩美女18网站久久精品| 亚洲综合久久综合激情久久| 无码日韩人妻精品久久蜜桃| 亚洲欧美一级久久精品| av色综合久久天堂av色综合在| 久久国产精品免费一区| 久久香蕉一级毛片| 国产一级做a爰片久久毛片| 久久久久久亚洲Av无码精品专口| 久久亚洲国产精品成人AV秋霞| 香蕉99久久国产综合精品宅男自| 国产精品九九久久免费视频 | 青青热久久国产久精品 | 欧美一区二区三区久久综合| 亚洲AV日韩精品久久久久| 欧美粉嫩小泬久久久久久久| 91久久精品国产91性色也| 四虎国产永久免费久久| 四虎国产精品免费久久5151| 亚洲一区中文字幕久久| 国产综合成人久久大片91|