社区讨论

暴力求解居然满分过了?

P2010[NOIP 2016 普及组] 回文日期参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lupg1vdi
此快照首次捕获于
2024/04/07 19:32
2 年前
此快照最后确认于
2024/04/07 20:52
2 年前
查看原帖

我的思路原本是

先看看暴力枚举能拿多少分
然后再试试怎么去优化 结果就AC了?

真的是纯纯暴力枚举

CPP
#include <iostream>
using namespace std;
bool flag;
int st, en, i, j, k, ans;
int mon[20] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int main()
{
	cin >> st >> en;
	i = st / 10000, j = st / 100 % 100, k = st % 100;
	do
	{
		if(i % 4 == 0 && (i % 400 == 0 || i % 100 != 0))
		{
			flag = 1;
			mon[2]++;
		}
		
		for( ;j <= 12; j++)
		{
			for( ;k <= mon[j];k++)
			{
				int moment = i * 10000 + j * 100 + k, _return = 0, _moment = moment;
				
				// 回文 
				while(moment != 0)
				{
					_return *= 10;
					_return += moment % 10;
					moment /= 10;
				}
				if(_return == _moment)
					ans++;
					
				if(_moment == en)
				{
					cout << ans;
					return 0;
				}
			}
			k = 1;
		}
		j = 1;
		if(flag)
		{
			flag = 0;
			mon[2]--;
		}
		i++;
	}while(i <= en / 10000);
	cout << ans;
	return 0;
}
在闰年的时候加了一个判定
后面回溯了一下

总之,这道题纯模拟还是挺适合新手食用的

回复

1 条回复,欢迎继续交流。

正在加载回复...