问题描述
试题编号: | 201509-2 |
---|---|
试题名称: | 日期计算 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 给定一个年份y和一个整数d,问这一年的第d天是几月几日? 注意闰年的2月有29天。满足下面条件之一的是闰年: 1) 年份是4的整数倍,而且不是100的整数倍; 2) 年份是400的整数倍。 输入格式 输入的第一行包含一个整数y,表示年份,年份在1900到2015之间(包含1900和2015)。 输入的第二行包含一个整数d,d在1至365之间。 输出格式 输出两行,每行一个整数,分别表示答案的月份和日期。 样例输入 2015 80 样例输出 3 21 样例输入 2000 40 样例输出 2 9 |
模拟题,细节详见代码
// luogu-judger-enable-o2
#include<bits/stdc++.h>
#include<unordered_set>
#define rg register ll
#define inf 2147483647
#define min(a,b) (a<b?a:b)
#define max(a,b) (a>b?a:b)
#define ll long long
#define maxn 200005
const double eps = 1e-8;
using namespace std;
inline ll read()
{
char ch = getchar(); ll s = 0, w = 1;
while (ch < 48 || ch>57) { if (ch == '-')w = -1; ch = getchar(); }
while (ch >= 48 && ch <= 57) { s = (s << 1) + (s << 3) + (ch ^ 48); ch = getchar(); }
return s * w;
}
inline void write(ll x)
{
if (x < 0)putchar('-'), x = -x;
if (x > 9)write(x / 10);
putchar(x % 10 + 48);
}
ll a[15]={31,28,31,30,31,30,31,31,30,31,30,31},b[15]={31,29,31,30,31,30,31,31,30,31,30,31};
inline bool judge(ll x)
{
return (x%400==0||(x%4==0&&x%100))?1:0;
}
int main()
{
ll y=read(),d=read();
ll ans1=0,ans2=0;
if(judge(y))
{
for(rg i=0;i<12;i++)
{
if(d-b[i]>=0)
{
d-=b[i];
ans1++;
if(d==0)
{
cout<<ans1<<endl<<b[ans1-1]<<endl;
return 0;
}
}
else
{
ans2=d;
cout<<ans1+1<<endl<<ans2<<endl;
return 0;
}
}
cout<<ans1<<endl<<b[ans1-1]<<endl;
return 0;
}
else
{
for(rg i=0;i<12;i++)
{
if(d-a[i]>=0)
{
d-=a[i];
ans1++;
if(d==0)
{
cout<<ans1<<endl<<a[ans1-1]<<endl;
return 0;
}
}
else
{
ans2=d;
cout<<ans1+1<<endl<<ans2<<endl;
return 0;
}
}
cout<<ans1<<endl<<a[ans1-1]<<endl;
return 0;
}
return 0;
}