Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1501 Accepted Submission(s): 399
#include<stdio.h>
#include<string.h>
#include<string>
#include<math.h>
#include<algorithm>
#define LL long long
#define PI atan(1.0)*4
#define DD doublea
#define MAX 100100
#define mod 10007
using namespace std;
int s[MAX][15];
char s1[MAX][15];
int op1[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int op2[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int five(int x)//判断后五位
{
int i,j;
char y=s[x][6];
int flag=1;
for(i=7;i<11;i++)
{
if(s[x][i]!=y)
{
flag=0;
break;
}
}
if(flag==1) return 1;
flag=1;
for(i=7;i<11;i++)
{
if(s[x][i]!=s[x][i-1]+1)
{
flag=0;
break;
}
}
if(flag==1) return 1;
else return 0;
}
int judge(int x)//判断闰年
{
if((x%4==0&&x%100!=0)||x%400==0)
return 1;
else return 0;
}
int eight(int x) //判断后八位
{
int i,j;
int flag=1;
int sum=s[x][3];
int mouth=s[x][7]*10+s[x][8];
int day=s[x][9]*10+s[x][10];
for(i=4;i<=6;i++)
sum=sum*10+s[x][i];
if(sum<1980||sum>2016||mouth<1||mouth>12)
return 0;
if(sum==1980)
{
if(mouth<7||mouth>12)
return 0;
if(day==0||day>op1[mouth])
return 0;
}
if(judge(sum))
{
if(day==0||day>op2[mouth])
return 0;
}
if(!judge(sum))
{
if(day==0||day>op1[mouth])
return 0;
}
return 1;
}
int main()
{
int t,i,j,n,m;
LL ans,a,b;
scanf("%d",&t);
while(t--)
{
ans=0;
scanf("%d",&n);
scanf("%lld%lld",&a,&b);
for(i=1;i<=n;i++)
{
scanf("%s",s1[i]);
for(j=0;j<11;j++)
{
s[i][j]=s1[i][j]-‘0‘;
}
}
for(i=1;i<=n;i++)
{
if(five(i))
ans+=a;
else if(eight(i))
ans+=a;
else ans+=b;
}
printf("%lld\n",ans);
}
return 0;
}
BestCoder Round #69 (div.2)(hdu5611)
原文:http://www.cnblogs.com/tonghao/p/5229062.html