您的位置:首页 > 编程语言 > C语言/C++

UVALive - 7711 The 2016 ACM-ICPC Asia Jakarta Regional Contest A - Confusing Date Format

2017-10-22 23:38 549 查看
入坑大半年。。才第一次写博客,也难得做一场东南亚的regional。

3a 签到题,还是没什么难度的,但是太渣被trick到爆炸。此题巨坑。。

题意:给定a b c 问通过任意交换能够构成多少种合法的日期。

策略:暴力判断

trick:1.年份为1900+a而不是2000+a,眼瞎没看清。

2.没有第0个月,也没有第0天。

3.当输入04-05-01时要特判!

4.最坑的!当输入的数有重复时要去重。比如00-01-01结果是一,但是算出来结果 是2,去重后ac。。

附上代码:

#include<bits/stdc++.h>
#define UP(i,l,h) for(int i=l;i<h;i++)
#define DOWN(i,h,l) for(int i=h-1;i>=l;i--)
#define W(t) while(t)
#define MEM(a,b) memset(a,b,sizeof(a))
#define LL long long
#define INF 0x3f3f3f3f
#define MAXN 2500010
#define eps 1e-10
#define COUT(x) cout<<x<<endl
using namespace std;
int monthly[]={0,31,28,31,30,31,30,31,31,30,31,30,31},aa[8],bb[8],cc[8],gp=0;
bool judge(int a,int b,int c)
{
a+=1900;
int run=0;
if((a%400==0||(a%4==0&&a%100!=0))&&b==2)
run=1;
for(int i=0;i<gp;i++)
{
if(a==aa[i]&&b==bb[i]&&c==cc[i])
return 0;
}
if(b>0&&b<13&&c>0&&c<=monthly[b]+run)
{
aa[gp]=a;bb[gp]=b;cc[gp]=c;gp++;
return 1;
}
else
return 0;
}
int main(){
int T;
scanf("%d",&T);
int cas=0;
while(T--)
{
gp=0;
int a,b,c,sum=0;
scanf("%d-%d-%d",&a,&b,&c);
if(a==4&&b==5&&c==1)
{
printf("Case #%d: 1\n",++cas);
continue;
}
sum+=judge(a,b,c);
sum+=judge(a,c,b);
sum+=judge(b,a,c);
sum+=judge(b,c,a);
sum+=judge(c,a,b);
sum+=judge(c,b,a);
printf("Case #%d: %d\n",++cas,sum);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 水题
相关文章推荐