问题描述:

现有一个八位数,从左往右分别代表年月日,例如20240919,代表2024年9月19日,现将该八位数蒙住几位数,问填入数字之后有几种情况是的日为质数,月+日为质数,年+月+日为质数

输入:

第一行输入一个整数n,表示有几个测试数,之后的n行每行输入一个八位字符串,未知的数用'-'代替

输出:

对于每个测试,输出符合要求的种类数

数据范围:

一共 10 个测试点,记 c,c 为八位字符串中 - 的个数。

对前 9 个测试点,在第 i 个测试点中保证 c=i−1,对 100% 的数据保证 1≤T≤10

问题分析:

本题是很明显的dfs问题,需要搜索所有组合并判断该组合是否合适

代码(这是洛谷dalao Ciyang的代码,写了一点注释,真的很厉害)

#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
int n, a[9], prim[10005], flag[10005], tot;
char tmpc;
int p10[] = { 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000 };
int yue[] = { 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1 };
//以下代码为质因式分解内容,之后会专门发一篇文章讲解 inline void init() {
flag[1] = 1;
for (int i = 2; i < 10005; i++) {
if (!flag[i]) prim[++tot] = i;
for (int j = 1; j <= tot; j++) {
if (i * prim[j] >= 10005) break;
flag[i * prim[j]] = 1;
if (i % prim[j] == 0) break;
}
}
return;
} inline int pdzs(int x) {
if (x < 2) return 0;
for (int i = 1; i <= tot; i++)
if (x % prim[i] == 0) return x == prim[i];
return 1;
} //以上代码为质因式分解内容,之后会专门发一篇文章讲解 //判断平年闰年,闰年返回1
inline int pdrn(int x) {
return (x % 4 == 0 && x % 100 != 0) || (x % 400 == 0 && x % 3200 != 0);
} //开始深搜
int dfs(int nown, int num, int rn, int jy) {
//8-nown代表现在取得的总位数
//num代表现在取得的数字
//rn=1表示闰年,rn=0表示平年
//jy=1表示大月31天,jy=0表示小月30
if (nown == 0) {
//判断年份
if (num / 10000 == 0) return 0;
if (rn && pdrn(num / 10000) == 0) return 0;
//判断年+月+日是否为质数
return pdzs(num);//此时已经判断了日和月+日
}
if (nown == 6) {
//判断日
if (num == 0 || num > 31 || !pdzs(num))return 0;
if (num == 31) jy = 1;
}
if (nown == 4) {
//判断月+日
if (num < 32 || num>1231 || !pdzs(num)) return 0;
if (jy == 1 && !yue[num / 100]) return 0;
if (num / 100 == 2) {
if (num % 100 > 29)return 0;
if (num % 100 == 29) rn = 1; //代表为闰年
}
}
//如果当前位数已经确定那么直接下一层
if (a[nown] != -1) dfs(nown - 1, a[nown] * p10[8 - nown] + num, rn, jy);
int res = 0;
for (int i = 0; i <= 9; i++) res += dfs(nown - 1, i * p10[8 - nown] + num, rn, jy);
//输出最后的可能数
return res;
}
char get() {
char ch = getchar();
while ((ch < '0' || ch>'9') && ch != '-')ch = getchar();
return ch;
} void put(int x) {
if (x > 9)put(x / 10);
putchar('0' + x % 10);
return;
} int main() {
init(), cin >> n;
while (n--) {
for (int i = 1; i <= 8; i++)tmpc = get(), a[i] = (tmpc == '-' ? -1 : tmpc - '0');
put(dfs(8, 0, 0, 0));
putchar('\n');
}
return 0;
}

dfs 【XR-2】奇迹——洛谷5440的更多相关文章

  1. 【DFS与BFS】洛谷 P1135 奇怪的电梯

    题目:奇怪的电梯 - 洛谷 (luogu.com.cn) 因为此题数据范围较小,有dfs及bfs等多种做法. DFS 比较正常的dfs,注意vis数组一定要回溯,不然会漏情况 例如这个数据 11 1 ...

  2. (DFS)P1605 迷宫 洛谷

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...

  3. 洛谷 P1219 八皇后【经典DFS,温习搜索】

    P1219 八皇后 题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序 ...

  4. 洛谷P2444 [POI2000]病毒(AC自动机,DFS求环)

    洛谷题目传送门 AC自动机入门--yyb巨佬的博客 AC自动机入手经典好题(虽然年代久远) 有了fail指针,trie树就不是原来的树型结构了,我们可以把它叫做trie图,由父节点向子节点连的边和fa ...

  5. 洛谷P4907【CYH-01】小奔的国庆练习赛 :$A$换$B$ $problem$(DFS,剪枝)

    洛谷题目传送门 顺便提一下题意有一个地方不太清楚,就是如果输出No还要输出最少需要添加多少张牌才能满足要求.蒟蒻考完以后发现四个点Too short on line 2... 比较需要技巧的搜索 既然 ...

  6. 洛谷P1219 :八皇后(DFS+回溯)

    题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序列2 4 6 1 3 ...

  7. 洛谷P2982 [USACO10FEB]慢下来Slowing down(线段树 DFS序 区间增减 单点查询)

    To 洛谷.2982 慢下来Slowing down 题目描述 Every day each of Farmer John's N (1 <= N <= 100,000) cows con ...

  8. 洛谷P1219 八皇后【dfs】

    题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序列2 4 6 1 3 ...

  9. 洛谷P3385 【模板】负环(DFS求环)

    洛谷题目传送门 HNOI爆零前回刷模板题 非常不正经的题目,目前并没有合适的优秀算法,就算是大家公认的dfs(还是不要强行叫dfs-spfa吧,概念应该不一样,这就是暴力dfs松弛答案) 但是对于随机 ...

  10. 【题解】洛谷P1514 [NOIP2010TG] 引水入城(DFS+DP)

    次元传送门:洛谷P1514 思路 可以证明如果有解 那么每个蓄水池可以覆盖到的干旱区必定是线段 证明: 举个栗子 8 9 8 7 9 7 6 9 6 明显到不了中间的点 如果不是连续的线段 中间肯定有 ...

随机推荐

  1. Java 网络编程(TCP编程 和 UDP编程)

    1. Java 网络编程(TCP编程 和 UDP编程) @ 目录 1. Java 网络编程(TCP编程 和 UDP编程) 2. 网络编程的概念 3. IP 地址 3.1 IP地址相关的:域名与DNS ...

  2. AX网相关图片(原创)

    官网:AXA6.COM | The future is come. Copyright 2020 – 2023| AX网 Axa6.Com | All Rights Reserved

  3. C# 泛型SQLHelper<T>类

    示例[1] 1.创建SQLHelper类 using System.Collections.Generic; using System.Configuration; using System.Data ...

  4. SUM-ACM,3月24-3-31周报

    两场天梯赛和一场atcoder. 主要错误知识点在于字符串的处理和并查集的掌握不够,不懂灵活运用. 第一场pta天梯赛 7-5 6翻了 一道字符串的题,我只拿了14分.我不熟悉一个点,f(i,0,s. ...

  5. ScaleDet:AWS 基于标签相似性提出可扩展的多数据集目标检测器 | CVPR 2023

    论文提出了一种可扩展的多数据集目标检测器(ScaleDet),可通过增加训练数据集来扩大其跨数据集的泛化能力.与现有的主要依靠手动重新标记或复杂的优化来统一跨数据集标签的多数据集学习器不同,论文引入简 ...

  6. 【转载】Win10系统, administrator账户被微软账户强行绑定,怎么破?

    首先 声明:这是转载,我只是做一个记录,以下内容可解决问题(本人已尝试并已解决),当然也可以去转载出处查看大佬的原回答: Win10系统, administrator账户被微软账户强行绑定,怎么破? ...

  7. 如何在AS中实现mysql查询并输出在视图上

    新建子线程启用mysql new Thread(){ @override public void run(){ //在这里进行数据库调用 } }.start(); handler简单使用方法 hand ...

  8. douyin 今日头条 巨量登录滑块和douyin详情滑块分析

    声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容.敏感网址.数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均 ...

  9. 【摘录】人形机器人和自动驾驶技术 —— 3D机器视觉技术

    以下内容引自: https://www.eda365.com/forum.php?mod=viewthread&tid=744288 3D机器视觉技术分为两个部分,即3D重构技术和3D数据分析 ...

  10. 零基础学习人工智能—Python—Pytorch学习(二)

    前言 数学的学习跟数学的计算是要分开的,现在回头再去看大学的高数和线性代数,如果只是学习的话,其实一门课程3天,也就学完了. 学校的课程之所以上那么久,其实是为了考试,也就是为计算准备的.计算有意义的 ...