首页 > 其他分享 >CSP历年复赛题-P2010 [NOIP2016 普及组] 回文日期

CSP历年复赛题-P2010 [NOIP2016 普及组] 回文日期

时间:2024-06-06 13:00:12浏览次数:30  
标签:NOIP2016 return int res P2010 month 日期 year CSP

原题链接:https://www.luogu.com.cn/problem/P2010

题意解读:计算两个日期之间有多少个日期是回文。

解题思路:

如果通过枚举两个日期之间的所有日期,然后判断回文,则会有几个问题:

枚举数据规模在10^7级别,再加上对于日期加一天、判断回文等处理,有可能超时,而且对日期进行加一天、判断回文等操作都比较麻烦。

换一种枚举思路:

由于年开头数字不为0,年的范围是1000~9999,如果是回文日期,日期的年部分翻转后就是月日部分

所以只需要枚举年:1000~9999,就可以产生所有的可能的回文日期

但是对于一个年,翻转后生成的日期不一定是一个有效日期(开始日期<=日期<=结束日期,1<=月<=12,1<=日<=年月对应的最大天数)

因此,只需要将所有年进行翻转,然后和年拼接生成一个日期,判断该日期是否有效,如果有效就是一个

100分代码:

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

int date1, date2;
int ans;

int month_days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

//把整数年y转为string(如果不记得to_string()函数)
string itostr(int y)
{
    string res;
    res += y / 1000 + '0';
    res += (y / 100) % 10 + '0';
    res += (y / 10) % 10 + '0';
    res += y % 10 + '0';
    return res;
}

//把字符串转为整数(如果不记得系统stoi()函数)
int strtoi(string s)
{
    int res = 0;
    for(int i = 0; i < s.size(); i++)
    {
        res = res * 10 + s[i] - '0';
    }
    return res;
}

//判断year是否是闰年
bool isleap(int year)
{
    return year % 100 != 0 && year % 4 == 0 || year % 400 == 0;
}

//获取year年month月的天数
int getdays(int year, int month)
{
    if(isleap(year))
    {
        int days = month_days[month];
        if(month == 2) days++;
        return days;
    }
    else return month_days[month];
}

//检查日期是否有效
bool check(int date)
{
    if(date < date1 || date > date2) return false;
    int year = date / 10000;
    int month = (date / 100) % 100;
    int day = date % 100;
    if(month < 1 || month > 12) return false;
    if(day < 1 || day > getdays(year, month)) return false;
    return true;
}

int main()
{
    cin >> date1 >> date2;
    for(int i = 1000; i <= 9999; i++)
    {
        string year = itostr(i); 
        string date = year;
        for(int i = 3; i >= 0; i--) date += year[i]; //年翻转,拼接 
        int dt = strtoi(date);
        if(check(dt)) ans++;
    }
    cout << ans;

    return 0;
}

 

标签:NOIP2016,return,int,res,P2010,month,日期,year,CSP
From: https://www.cnblogs.com/jcwy/p/18234942

相关文章

  • CSP历年复赛题-P2672 [NOIP2015 普及组] 推销员
    原题链接:https://www.luogu.com.cn/problem/P2672题意解读:N家住户,每家住户与出入口距离是Si米,推销员每走1米疲劳值+1,向第i家住户推销疲劳值+Ai,推销员推销完原路返回出口,计算在向不同数量X的住户推销时,能达到的最大疲劳值。解题思路:本题是一种贪心选择问题,需要思考出可能的最优......
  • CSP历年复赛题-P2671 [NOIP2015 普及组] 求和
    原题链接:https://www.luogu.com.cn/problem/P2671题意解读:找到所有符合条件的三元组,累加三元组的分数,结果对10007取模。解题思路:仔细读题,并分析数据规模,1~4个数据点可以通过O(n^2)复杂度解决,也就是枚举法。1、枚举法要求x<y<z,y−x=z−y,移项可得x+z=2*y,并且c......
  • 打卡信奥刷题(52)用Scratch图形化工具信奥P7909 [普及组] [CSP-J 2021] 分糖果
    [CSP-J2021]分糖果题目背景红太阳幼儿园的小朋友们开始分糖果啦!题目描述红太阳幼儿园有nnn个小朋友,你是其中之一。保证......
  • 2024年云计算、信号处理与网络技术国际学术会议(ICCCSPNT 2024)
    2024年云计算、信号处理与网络技术国际学术会议(ICCCSPNT2024)2024InternationalAcademicConferenceonCloudComputing,SignalProcessing,andNetworkTechnology(ICCCSPNT2024)会议简介:2024年云计算、信号处理与网络技术国际学术会议(简称ICCCSPNT2024)是一个集结了......
  • P5663 [CSP-J2019] 加工零件
    原题链接题解请仔细读题!!!如果1号工人需要提供原材料,那么代表\(a_i\to1\)存在一条长度为\(L_i\)的路径(可以重复走)由于重复走不会改变路径长度的奇偶性,所以一定存在一条奇偶性相同,且长度小于\(L_i\)的路径,所以只要求从点1出发到各个点奇偶最短路即可code#include<bits/......
  • CSP历年复赛题-P1982 [NOIP2013 普及组] 小朋友的数字
    原题链接:https://www.luogu.com.cn/problem/P1982题意解读:特征值:第i个同学的特征值是1~i中最大子段和,分数:第i个同学分数是前1~i-1个同学的分数+特征值最大值,求最大分数。解题思路:第一步:先计算特征值f[i],f[i]等于1~i中所有数的最大子段和,所以借助最大子段和的DP方法,每次计算以i......
  • CSP历年复赛题-P1981 [NOIP2013 普及组] 表达式求值
    原题链接:https://www.luogu.com.cn/problem/P1981题意解读:中缀表达式求值,只有+,*,没有括号,保留后4位。解题思路:中缀表达式求值的典型应用,采用两个栈:符号栈、数字栈,对于没有括号的情况,只需要如下步骤:1、遍历表达式每一个字符2、如果遇到数字,则持续提取数字,保存整数到数字栈3、......
  • CSP历年复赛题-P1980 [NOIP2013 普及组] 计数问题
    原题链接:https://www.luogu.com.cn/record/160821231题意解读:统计1~n中x的个数。解题思路:枚举每个数,提取每一位,判断是否等于x。100分代码:#include<bits/stdc++.h>usingnamespacestd;intn,x,ans;intmain(){cin>>n>>x;for(inti=1;i<=n;i++)......
  • CSP历年复赛题-P1078 [NOIP2012 普及组] 文化之旅
    原题链接:https://www.luogu.com.cn/problem/P1078题意解读:1~n个国家,每个国家有自己的文化,不同国家文化可以相同,要从起点遍历到终点,已经学习过的文化不能重复学习,已经学习过的文化被某个文化歧视的国家也不能遍历,且不同国家之间有边,边有不同的距离,计算从起点到终点的最短路径。解......
  • 2024年第七届信息通信与信号处理国际会议(ICICSP 2024)即将召开!
    2024年第七届信息通信与信号处理国际会议(ICICSP2024)将于2024年9月21-23日在中国舟山举行。ICICSP2024是一个汇聚全球顶尖科研人才、探讨信息通信与信号处理领域最新科研成果和发展趋势的国际盛会。本次会议的主题涵盖了信号处理、多媒体信号处理、互联网技术等多个领域的前......