本题为简答的字符串模拟题目
AC代码如下:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
char s[15];
int runnian(int n)
{
if(n%400==0||(n%4==0&&n%100!=0))
return 1;
return 0;
}
int main()
{
int t,n,a,b,i;
long long sum;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
scanf("%d%d",&a,&b);
sum=0;
while(n--)
{
scanf("%s",s);
int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(s[6]==s[7]&&s[7]==s[8]&&s[8]==s[9]&&s[9]==s[10])
sum+=a;
else if(s[6]-1==s[7]&&s[7]-1==s[8]&&s[8]-1==s[9]&&s[9]-1==s[10])
sum+=a;
else if(s[6]+1==s[7]&&s[7]+1==s[8]&&s[8]+1==s[9]&&s[9]+1==s[10])
sum+=a;
else
{
int year=0,month=0,day=0;
year=(s[3]-'0')*1000+(s[4]-'0')*100+(s[5]-'0')*10+(s[6]-'0');
month=(s[7]-'0')*10+(s[8]-'0');
day=(s[9]-'0')*10+(s[10]-'0');
int flag=0;
if(year<1980||year>2016)
flag=1;
else
{
int cnt=runnian(year);
if(cnt)
days[2]++;
if(month<1||month>12)
flag=1;
else
{
if(day>days[month]||day<1)
flag=1;
}
}
if(flag==0)
sum+=a;
else
sum+=b;
}
}
printf("%I64d\n",sum);
}
return 0;
}