P5440 【XR-2】奇迹 (大模拟dfs+欧拉筛板子+闰年)

这篇具有很好参考价值的文章主要介绍了P5440 【XR-2】奇迹 (大模拟dfs+欧拉筛板子+闰年)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

传送门https://www.luogu.com.cn/problem/P5440

相信奇迹的人,本身就和奇迹一样了不起。——笛亚 《星游记》

思路历程:很离谱的一题,在理论上并不困难,只要简单dfs+欧拉筛就能过。在一开始,我采用了倒着模拟的思路,用stoi函数,强转字符串,发现样例能跑,但是仍旧RE(现在仍未理解这样的原因),于是,我选择了另一种做法,反过来遍历。

下面是代码:文章来源地址https://www.toymoban.com/news/detail-826883.html

#include<iostream>
#include<algorithm>
#include<cmath>
#include<set>
#include<string>
using namespace std;
const int N=1e8+5;
int _;
string s;
int ans;
bool nums[N];//这两行
long long f[10000001],cot=0;//这两行是欧拉筛的板子
int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//减少代码量,开一个月份数组
bool check(int num){//检查年份符不符合逻辑
	int day=num%100;
	int month=(num/100)%100;
	int year=num/10000;
	if((year%4==0&&year%100!=0)||year%400==0){
		months[2]=29;
	}
	else months[2]=28; 
	return year>=1&&year<=9999&&month>=1&&month<=12&&day>=1&&day<=months[month];
}

void dfs(int x,int num){//第x层,数字为num
    int sum;//记录每一层要加多少
    if(x==8&&check(num)&&!nums[num]&&!nums[num%10000]&&!nums[num%100]){//100和10000
    	ans++;//2 4 8都要是素数
    }
    else if(x==8) return;//只要是8就返回
	else if(s[x]!='-'){
		sum=(s[x]-'0')*pow(10,7-x);//字符串转数字  要注意减去‘0’
		dfs(x+1,num+sum);
	}
	else{
		if(x==4){//特判优化,减少for的遍历(月份)
			for(int i=0;i<2;++i){
				sum=i*pow(10,7-x);
				dfs(x+1,sum+num);
			}
		}
		else if(x==6){//特判优化(日子)
			for(int i=0;i<4;++i){
				sum=i*pow(10,7-x);
				dfs(x+1,sum+num);
			}
		}
		else{
			for(int i=0;i<=9;++i){
				sum=i*pow(10,7-x);
				dfs(x+1,sum+num);
			}
		}
	}
	
}

void solve(){
	ans=0;
	cin>>s;
	dfs(0,0);(从第0层开始)
	cout<<ans<<endl;
}

int main(){
	nums[1]=true;//1不是素数  true就不是素数 
	long long n=1e8;
    for(long long i=2;i<=n;i++)
    {
        if(!nums[i])
            f[cot++]=i;
        for(long long j=0;j<cot&&i*f[j]<=n;j++)
        {
            nums[f[j]*i]=true;
            if(i%f[j]==0)
                break;
        }
    }//从开头到这里就是一个欧拉筛的板子
	cin>>_;
	while(_--){
	    solve();	
	}
	return 0;
}

到了这里,关于P5440 【XR-2】奇迹 (大模拟dfs+欧拉筛板子+闰年)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • DFS—深度优先搜索

    递归函数代码形式 1 1 2 3 5 8 13 21 34 55 89 ... 已知前两项为1,之后每一项等于前两项之和。 现输入n,请输出兔子数列的第n项。 F ( n ) = { 1 ( n = 0 ) n ∗ F ( n − 1 ) ( n 0 ) F(n)=begin{cases}1(n=0)\\\\n*F(n-1)(n0)end{cases} F ( n ) = { 1 ( n = 0 ) n ∗ F ( n − 1 ) ( n 0 ) ​ 不难分析出

    2024年02月20日
    浏览(61)
  • 深度优先遍历(DFS)

    图的深度优先遍历类似于树的先根遍历(递归)。 树的先根遍历: 图的深度优先遍历 使用的逻辑结构是栈。 如果是非连通图,依旧无法遍历完所有结点。 所以,需要在遍历完一轮结点后,扫描未被标记的结点。 visited数组防止重复访问。 代码实现: 1.空间复杂度 来自函数

    2024年02月10日
    浏览(43)
  • 算法沉淀 —— 深度搜索(dfs)

    【题目链接】:2331. 计算布尔二叉树的值 【题目】: 【分析】:  在确定一颗二叉树的布尔值前,我们需要先得到左子树、右子树的结果(0/1)。如果左子树、右子树不是叶子节点,显然这是一个递归子问题(将求左子树、右子树的布尔值);  最后就是根据root的值来判断对

    2024年04月14日
    浏览(40)
  • 深度优先搜索(DFS)(算法笔记)

    本文内容基于《算法笔记》和官方配套练题网站“晴问算法”,是我作为小白的学习记录,如有错误还请体谅,可以留下您的宝贵意见,不胜感激。 深度优先搜索是一种枚举所有完整路径以遍历所有情况的搜索方法,总是以“深度”作为前进的。实现方式是有很多,最

    2024年02月08日
    浏览(50)
  • c++深度优先搜索DFS

    目录 介绍 实现过程 模板 例题详解 1.枚举排列 2.迷宫寻路 3.八皇后 剪枝与优化 作业 今天我们来学习一个极其重要的算法:深度优先搜索。 深度优先搜索,又叫DFS,是遍历图或者数的一种算法,本质就是递归。具体方法:先以一个节点为起点,向一个方向扩展,再以新的节

    2024年01月16日
    浏览(41)
  • 1358. 素数环-深度优先搜索-DFS

    代码:

    2024年01月19日
    浏览(23)
  • [算法日志]图论: 深度优先搜索(DFS)

    ​ 深度优先搜索算法是一种遍历图这种数据结构的算法策略,其中心思想是朝图节点的一个方向不断跳转,当该节点无下一个节点或所有方向都遍历完时,便回溯朝上一个节点的另一个方向继续遍历。这种搜索策略与回溯法有异曲同工之妙。 正因为和回溯法有相似之处,所

    2024年02月03日
    浏览(62)
  • DFS(深度优先搜索)8种题型

    👂 如果当时2020(不曾遗忘的符号) - 许嵩/朱婷婷 - 单曲 - 网易云音乐 👂 一个深爱的女孩 - 本兮 - 单曲 - 网易云音乐 半年前写了一半的博客.......(2023/7/14),今天花6小时给它补充完毕...... 目录 🌼补充知识  🌳分类  🌼一, 1158: 八皇后 🌼二, 3472. 八皇后 🌼三,

    2024年03月28日
    浏览(36)
  • 图的深度优先搜索或 DFS

     图的深度优先遍历(或搜索)类似于 树的深度优先遍历。 这里唯一的问题是,与树不同,图可能包含循环(一个节点可能被访问两次)。为避免多次处理一个节点,请使用布尔访问数组。一个图可以有多个 DFS 遍历。 例子:   输入:  n = 4, e = 6  0 - 1, 0 - 2, 1 - 2, 2 - 0, 2 -

    2023年04月13日
    浏览(68)
  • LeetCode 周赛 341 场,模拟 / 树上差分 / Tarjan 离线 LCA / DFS

    本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 上周末有单双周赛,双周赛我们讲过了,单周赛那天早上有事没参加,后面做了虚拟竞赛,然后整个人就不好了。前 3 题非常简单,但第 4 题有点东西啊,差点就放弃了。最后,

    2023年04月20日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包