# cf 158div.2 B. Ancient Prophesy

要求找到严格符合的dd-mm-yyyy的出现次数最多的日期，是严格符合，多个-或少个0都不可以，所以这题直接匹配就可以了

比赛时候一直写的是分割，WA了n次……

strtok(s,"-");

strtok(NULL,"-");

/*
author:jxy
lang:C/C++
university:China,Xidian University
**If you need to reprint,please indicate the source**
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <sstream>
#include <map>
#define INF 1E9
using namespace std;
char s[100010];
const int D[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
map<string,int> num;
int main()
{
gets(s);
int i,day,month,year,Max=0;
stringstream st;
string t,ans;
for(i=2;s[i+7];i++)
{
if(s[i]!='-'||s[i+3]!='-'||s[i+1]=='-'||s[i+2]=='-')continue;
if(s[i-1]=='-'||s[i-2]=='-'||s[i+4]=='-'||s[i+6]=='-'||s[i+7]=='-'||s[i+5]=='-')continue;
day=s[i-1]-'0'+(s[i-2]-'0')*10;
month=(s[i+1]-'0')*10+s[i+2]-'0';
year=(s[i+4]-'0')*1000+(s[i+5]-'0')*100+(s[i+6]-'0')*10+s[i+7]-'0';
if(year<2013||year>2015)continue;
if(month<1||month>12)continue;
if(day<1||day>D[month])continue;
if(day<10)st<<"0";
st<<day<<"-";
if(month<10)st<<"0";
st<<month<<"-"<<year;
st>>t;
st.clear();
num[t]++;
if(num[t]>Max)
{
Max=num[t];
ans=t;
}
//cout<<t<<endl;
}
cout<<ans<<endl;
}


/*
author:jxy
lang:C/C++
university:China,Xidian University
**If you need to reprint,please indicate the source**
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <sstream>
#include <map>
#define INF 1E9
using namespace std;
char s[100010];
map<string,int> num;
int Max=0;
string ans;
int D[12]={31,28,31,30,31,30,31,31,30,31,30,31};
char *p,*ll,*l,*now;
int main()
{
gets(s);
ll=strtok(s,"-");
l=strtok(NULL,"-");
bool flag=1,rflag;
long long year,month,day;
stringstream tt;
string t;
for(;now=strtok(NULL,"-");ll=l,l=now)
{
flag=1;
int len=strlen(now);
char te;
if(len>4)
{
te=now[4];
now[4]='\0';
}
if(len<4)continue;
sscanf(now,"%I64d",&year);
if(len>4) now[4]=te;
if(*(l-1)=='-'||*(l+3)=='-')continue;
switch(year)
{
case 2013:case 2014:case 2015:break;
default:flag=0;break;
}
if(!flag)continue;
if(strlen(l)!=2)continue;
sscanf(l,"%I64d",&month);
if(month<1||month>12)continue;
sscanf(ll,"%I64d",&day);
day%=100;
if(day<1||day>D[month-1])continue;
if(day<10)tt<<"0";
tt<<day<<"-";
if(month<10)tt<<"0";
tt<<month<<"-"<<year;
tt>>t;
tt.clear();
num[t]++;
if(num[t]>Max)
{
Max=num[t];
ans=t;
}
}
cout<<ans<<endl;
}


+ 订阅