zoj 3326 An Awful Problem 题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3751
模拟水
题目大意:Hiqivenfin母要在prime月prime日给他糖,给出起止日期,求得到糖数。
题目分析:模拟,耐心细心即可~
code:
#include<stdio.h>
int isPrime(int a)
{
return a==2||a==3||a==5||a==7||a==11||a==13||a==17||a==19||a==23||a==29||a==31?1:0;
}
int nom(int y,int m)
{//number of month
int n;
switch(m)
{
case 2:n=(y%4==0&&y%100!=0||y%400==0)?10:9;break;
case 3:
case 5:
case 7:n=11;break;
case 11:n=10;break;
default:n=0;
}
return n;
}
int dom(int y,int m)
{//day of month
int n;
switch(m)
{
case 2:n=(y%4==0&&y%100!=0||y%400==0)?29:28;break;
case 3:
case 5:
case 7:n=31;break;
case 11:n=30;break;
default:n=0;
}
return n;
}
int main()
{
int t,i,j,y1,y2,m1,m2,d1,d2,sum,temp;
scanf("%d",&t);
while(t--)
{
sum=0;
scanf("%d%d%d%d%d%d",&y1,&m1,&d1,&y2,&m2,&d2);
if(y1>=y2)//交换,似乎其实不用
{
if(y1>y2)temp=y1,y1=y2,y2=temp,temp=m1,m1=m2,m2=temp,temp=d1,d1=d2,d2=temp;
else if(m1>=m2)
{
if(m1>m2)temp=m1,m1=m2,m2=temp,temp=d1,d1=d2,d2=temp;
else if(d1>d2)temp=d1,d1=d2,d2=temp;
}
}
if(y1==y2)//一样怎么办
{
if(m1==m2)
{
if(!isPrime(m1))
{
printf("0\n");
continue;
}
for(i=d1;i<=d2;i++)
sum+=isPrime(i);
printf("%d\n",sum);
continue;
}
if(isPrime(m1))
for(i=d1;i<=dom(y1,m1);i++)
sum+=isPrime(i);
for(i=m1+1;i<m2;i++)
sum+=nom(y1,i);
if(isPrime(m2))
for(i=1;i<=d2;i++)
sum+=isPrime(i);
printf("%d\n",sum);
continue;
}
if(isPrime(m1))//原来要精确到天啊,坑B!
for(i=d1;i<=dom(y1,m1);i++)
sum+=isPrime(i);//第一年
for(i=m1+1;i<12;i++)
sum+=nom(y1,i);
for(i=y1+1;i<y2;i++)//中间的
if(i%4==0&&i%100!=0||i%400==0)sum+=53;
else sum+=52;
for(i=2;i<m2;i++)
sum+=nom(y2,i);
if(isPrime(m2))
for(i=2;i<=d2;i++)
sum+=isPrime(i);//最后一年
printf("%d\n",sum);
}
return 0;
}
PS:三wrong而过,悲从中来……