| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:贴代码In Reply To:Re:如果之后两个状态都必胜,那么此状态必败;如果之后两个状态有一个必败,那么此状态必胜。2001.11.4是必败点,之后的都是必胜点 Posted by:yzhw at 2009-05-30 12:26:18 Source Code
Problem: 1082 User: yzhw
Memory: 552K Time: 0MS
Language: GCC Result: Accepted
Source Code
# include <stdio.h>
# include <string.h>
# include <stdbool.h>
char refer[102][13][32];
int cul(int y,int m)
{
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12) return 31;
else if(m==2)
{
if((y%100!=0&&y%4==0)||y%400==0) return 29;
else return 28;
}
else return 30;
}
bool chk1(int *y,int *m,int *d)
{
if((*d)+1<=cul(*y,*m))
{
(*d)++;
return 1;
}
else
{
if((*m)!=12)
{
(*m)++;
(*d)=1;
return 1;
}
else
{
(*m)=1;
(*y)++;
(*d)=1;
return 1;
}
}
}
bool chk2(int *y,int *m,int *d)
{
if((*m)!=12)
{
(*m)++;
if((*d)>cul(*y,*m)) return 0;
else return 1;
}
else
{
(*m)=1;
(*y)++;
return 1;
}
}
char jud(int y,int m,int d)
{
if(y==2001&&m==11&&d==4) return 2;
else if(y>2001||(y==2001&&m>11)||(y==2001&&m==11&&d>4)) return 1;
else if(refer[y-1900][m][d]) return refer[y-1900][m][d];
else
{
int ty1=y,tm1=m,td1=d,ty2=y,tm2=m,td2=d;
if(chk2(&ty1,&tm1,&td1))
{
chk1(&ty2,&tm2,&td2);
if(jud(ty1,tm1,td1)==2||jud(ty2,tm2,td2)==2)
{
refer[y-1900][m][d]=1;
return 1;
}
else if(jud(ty1,tm1,td1)==1&&jud(ty2,tm2,td2)==1)
{
refer[y-1900][m][d]=2;
return 2;
}
}
else
{
chk1(&ty2,&tm2,&td2);
if(jud(ty2,tm2,td2)==2)
{
refer[y-1900][m][d]=1;
return 1;
}
else
{
refer[y-1900][m][d]=2;
return 2;
}
}
}
}
int main()
{
int testcase;
memset(refer,0,sizeof(refer));
scanf("%d",&testcase);
while(testcase--)
{
int y,m,d;
scanf("%d %d %d",&y,&m,&d);
if(jud(y,m,d)==1)
printf("YES\n");
else printf("NO\n");
}
system("pause");
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator