现在的位置: 首页 > 综合 > 正文

nyoj 192 ACgirl’s SMS guards(vector+数组)

2018年04月26日 ⁄ 综合 ⁄ 共 3178字 ⁄ 字号 评论关闭

牛人都是用字典树做的,字典树还没看,就用vector+数组做,时间多了点儿

 

描述

ACgirl是ACM集训队里的一朵奇葩(大家懂的……),在学校有很多GG对ACgirl心生爱慕之情,因为学校的GG比较害羞,不敢当着ACgirl面表白,还好现在大家都有手机,于是GG们疯狂的给ACgirl发爱慕表白的短信。于是ACgirl的手机的短信都爆满,为了改变这样的状况,她叫你帮忙写一个短信过滤的短信卫士,过滤哪些无聊的短信。

输入
本题有多组测试数据,以EOF为输入结束的标志。
第一行是一个整数n(1 <= n <= 100)表示有多少组测试数据(有多组n),接下来是每一组测试数据,每一组测试数据的第一行是一个整数m(1 <= m <= 100000),表示ACgirl的手机短信的白名单,接下来是m行的白名单,每一个行数据代表一个手机号码TelNumber(最长为11个字符)全由数字组成(0~9),接下来为一个整数k(1 < = k <= 10000)表示有k条来访短信,每条短信的的格式为getTime,TelNumber,Context(英文逗号前后都没有空格)。其中getTime(yyyy-mm-tt:hh:mm:ss)为接收到短信的时间(精确到秒),TelNumber(最多为11个字符)为发送短信的手机号码,Context(最多为100个字符)为短信内容,短信内容中保证至少有两个个逗号“,”(英文)。
输出
对于每组测试数据,先输出”Case n:”,n从1开始,对于手机号码为白名单的短信进行回复,对于无效的短信(短信的某个域不合法,例如域的内容不能为空,时间要检查合法性)和其他手机号码的短信进行过滤不用回复,回复格式和收到的短信的格式是一样的,其中getTime为接收到的短信时间,TelNumber 为15980698888,context为Sorry,I am ACb0y's girl friend。每一组测试数据最后输出统计信息,统计一共回复了多少短信,格式为:”count = xxx”,等号左右各一个空格,具体看输出样例。
样例输入
1
5
15980698852
18580693352
16345698867
15666456445
12340694552
5
2011-03-09:13:32:34,15980698881,I love you.
0051-03-09:08:02:58,15980698881,I love you.
2011-02-29:13:32:34,18580693352,Acgirl I love you
2011-02-28:13:32:34,18580693352,
2025-03-10:23:15:48,12340694552,My name is Smith,I like you very much.
样例输出
Case 1:
2025-03-10:23:15:48,15980698888,Sorry,I am ACb0y's girl friend
count = 1
#include<cstdio>
#include<cstring>
#include<string>
#include<map>
#include<vector>
#include<stdlib.h>
using namespace std;
map<string,int>tel;
vector<int>result[10011];
int main()
{
    int cases,n,i,j,m,k;
    char tep[12],message[1011],year[5],month[3],day[3],hour[3],min[3],second[3],telphone[12],total;
    while(scanf("%d",&cases)!=EOF)
    {
	 int count=0;
	 while(cases--)
     {
     //注意清0,map和vector都要清0
	   tel.clear();
       for(i=0;i<10001;i++)
       {
           result[i].clear();
       }
       scanf("%d",&n);
       for(i=0;i<n;i++)
       {
           scanf("%s",tep);
           tel[tep]=i+1;
       }
       scanf("%d",&m);
	   getchar();
//注意getchar()否则错误
       total=0;
       for(j=0;j<m;j++)
       {
           gets(message);
           int x=strlen(message);
           if(x<21) continue;

           
           year[0]=message[0];year[1]=message[1];
           year[2]=message[2];year[3]=message[3];
           year[4]='\0';

           month[0]=message[5];month[1]=message[6];
		   month[2]='\0';

           day[0]=message[8];day[1]=message[9];
		   day[2]='\0';

           hour[0]=message[11];hour[1]=message[12];
		   hour[2]='\0';

           min[0]=message[14];min[1]=message[15];
		   min[2]='\0';

           second[0]=message[17];second[1]=message[18];
		   second[2]='\0';


           int yy,mm,dd,hh,mt,ss;
           yy=atoi(year);mm=atoi(month);dd=atoi(day);
           hh=atoi(hour);mt=atoi(min);ss=atoi(second);

           for(k=20;;k++)
           {
               if(message[k]>='0'&&message[k]<='9')
               telphone[k-20]=message[k];
               else break;
           }
           telphone[k-20]='\0';

           if((x-k)==1||(x-k)==0) continue;
          //注意这里的if语句有两个情况需要判断第1种,2011-02-28:13:32:34,18580693352,第二种2011-02-28:13:32:34,18580693352  
        
       
          //也就是最后有没有‘,’的两种不同的情况  
          if(tel[telphone]==0) continue;
           if(hh>=24||mt>=60||ss>=60||mm>12||dd>31||yy==0||mm==0||dd==0) continue;
           if(mm==4||mm==6||mm==9||mm==11)
           {
               if(dd>30) continue;
           }
		   if(mm==2)
		   {
               if(yy%400==0||(yy%4==0)&&(yy%100!=0))
               {
				   if(dd>29) continue;
			   }
			   else
			   {
				   if(dd>28)continue;
			   }
		   }
     
		   result[total].push_back(yy);
		   result[total].push_back(mm);
		   result[total].push_back(dd);
		   result[total].push_back(hh);
		   result[total].push_back(mt);
		   result[total].push_back(ss);
           total++;

       }
       printf("Case %d:\n",++count);
       for(i=0;i<total;i++)
       {
           printf("%04d-%02d-%02d:%02d:%02d:%02d,15980698888,Sorry,I am ACb0y's girl friend\n",result[i][0],result[i][1],result[i][2],result[i][3],result[i][4],result[i][5]);
       }
       printf("count = %d\n",total);
     }
   }
    return 0;
}

 

抱歉!评论已关闭.