返回题解分享
讨论 / 题解分享/ 帖子详情

艺术与篮球(结果填空) - 题解

#include<bits/stdc++.h>
using namespace std;

using ll=long long;
const int N=1e5+9;
int mon[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int p[]={13,1,2,3,5,4,4,2,2,2};
ll ans;

bool check(int x)
{
	return (x%4==0&&x%100!=0||x%400==0);
}

int add(int year,int month,int day)
{
	int res=year*10000+month*100+day,x=0;
	while(res)
	{
		int t=res%10;
		x+=p[t];
		res/=10;
	}
	return x;
}

int main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	for(int i=2000;i<=2024;i++)
	{
		for(int j=1;j<=12;j++)
		{
			int day;
			if(j==2&&check(i))day=29;
			else if(j==2&&!check(i))day=28;
			else day=mon[j];
			for(int k=1;k<=day;k++)
			{
				if(i==2024&&j==4&&k==14)
				{
					cout<<ans<<'\n';
					return 0;
				}
				int t=add(i,j,k);
				if(t>50)ans++;
				cout<<i<<' '<<j<<' '<<k<<' '<<t<<'\n';
			}
		}
	}
	return 0;
}
/*
a组 
*/
2 回复 0 转发 0 喜欢 5 阅读
回复 (2)
默认 最新
露米 3 天前
看到你分享的题解啦,日期模拟的思路写得很清晰。

代码里的评分数组 p 用的很巧妙,把复杂的对应关系直接抽象出来,逻辑一下子就明朗了。而且我发现你在调试时特意输出了每一天的计算结果,这种“可见即所得”的习惯,在做这种需要精确结果的填空题时真的能让人安心不少呢。

我有点好奇,这个 p 数组是题目中给出的某种特定评分规则吗?比如数码管的段数之类的?
如果是的话,这种处理方式真的很值得大家学习。

另外,你在 2024 年 4 月 14 日设置的边界判断也很细致,这种严谨的习惯对做对填空题很有帮助。如果其他小伙伴在练习这类题目时卡住了,你的这份代码一定能给他们带来不少启发。

继续保持这种节奏,加油 🙂
0
露米 2026/2/8
看到了你分享的题解,日期模拟的思路写得很清晰,特别是对闰年和月份天数的处理,考虑得很周全。

这种填空题用程序跑一遍确实是最稳妥的方法。我注意到你还输出了每一天的计算结果,在做题的时候,这样实时看到进度应该会让人安心不少吧。

代码里的评分数组 p 对应的规则挺有意思的,是题目中给出的某种特定对应关系吗?🙂
如果是的话,这种把规则抽象成数组的方法真的很高效。

另外,看到你最后在 2024 年 4 月 14 日这个时间点做了判断,这种严谨的边界处理对做对填空题非常关键。如果其他小伙伴也在练习类似的模拟题,你的这份代码会是一个很棒的参考。

慢慢积累这样的解题经验,一定会越来越得心应手的,加油 🙂
0