题目地址:点击打开链接
思路:注意闰年 的情况就行,还有就是最后输出的数要用long long 存
AC代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <climits>
#include <cmath>
#include <cctype>
typedef long long ll;
using namespace std;
char cf[20];
int lol[20];
bool check()
{
int i;
for(i=6; i<10; i++)
{
if(lol[i] != lol[i+1])
{
break;
}
}
if(i == 10)
return true;
for(i=6; i<10; i++)
{
if(lol[i] + 1 != lol[i+1])
break;
}
if(i == 10)
return true;
for(i=6; i<10; i++)
{
if(lol[i] - 1 != lol[i+1])
break;
}
if(i == 10)
return true;
int year = lol[3] * 1000 + lol[4] * 100 + lol[5] * 10 + lol[6];
if(year < 1980 || year > 2016)
return false;
int month = lol[7] * 10 + lol[8];
if(month <1 || month > 12)
return false;
int day = lol[9] * 10 + lol[10];
if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
{
if(day <1 || day > 31)
return false;
}
else if(month == 2)
{
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)//这里把条件写成了year % 100 == 1,wrong了好多发,傻逼了
{
if(day < 1 || day > 29)
return false;
}
else if(day < 1 || day > 28)
{
return false;
}
}
else if(day <1 || day > 30)
{
return false;
}
return true;
}
int main()
{
int t,n,a,b;
int i,j;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
scanf("%d%d",&a,&b);
ll sum = 0;
for(i=0; i<n; i++)
{
scanf("%s",cf);
for(j=0; j<11; j++)
{
lol[j] = cf[j] - '0';
}
if(check())
{
sum += a;
}
else
{
sum += b;
}
}
printf("%I64d\n",sum);
}
return 0;
}