题目:click
题意:星期一在每个月的1号,11号,21号,则是幸运的,给定一个时间,问从此开始的第N个幸运的日期是什么。

N是非常大的,打表找个规律,从1753-1-1开始找1月1号的年份存下来,暴力找到是56,112,确定周期是52,相减得年份周期是400,之间有2058个幸运周。之后直接暴力即可。中途注意一些细节,可以带入具体的边界值进行运算规律。
(打表代码)

#include<cmath>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<istream>
#include<vector>
#include<stack>
#include<set>
#include<map>
#include<algorithm>
#include<queue>
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3f
#define MAX_len 200005*4
using namespace std;
typedef long long ll;
typedef pair<int,int> PP;
const int mod=998244353;
int a[20]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int b[10]={5,6,11,6};
struct A {int m,d,y;
}que[1000100];
int len=0;
int main()
{int year=1753,month=1,day=1;int xq=1;int tot=0;int sum=900000;while(sum--){if((day==1||day==11||day==21)&&xq==1){if(day==1&&month==1){que[len].y=year;que[len].d=day;que[len++].m=month;//   cout<<year<<" "<<month<<" "<<day<<endl;}}if((year%4==0&&year%100!=0)||year%400==0){a[2]=29;}else{a[2]=28;}day++;xq++;tot++;if(xq>7)xq-=7;if(day>a[month]){month++;day=1;if(month>12){year++;month-=12;}}}int i;len--;for(i=0;i<len;i++){que[i].d=que[i+1].y-que[i].y;//cout<<que[i].d<<endl;}//   cout<<len<<endl;//  return 0;for(int temp=1;temp<=150;temp++){for(i=0;i+temp<len;i++){if(que[i].d==que[i+temp].d)continue;elsebreak;}if(i+temp>=len)printf("%d\n",temp);}cout<<que[56].y<<" "<<que[0].y<<" "<<que[56].y-que[0].y<<endl;return 0;
}

预先处理出2058*2的一个循环表。

#include<cmath>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<istream>
#include<vector>
#include<stack>
#include<set>
#include<map>
#include<algorithm>
#include<queue>
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3f
#define MAX_len 200005*4
using namespace std;
typedef long long ll;
typedef pair<int,int> PP;
int a[20]={0,31,28,31,30,31,30,31,31,30,31,30,31};
struct A {int y,d,m;
};
map<int,A>hh;
void init()
{int year=1753,month=1,day=1;int xq=1;int len=0;int sum=400*366;while(sum--){if((day==1||day==11||day==21)&&xq==1){if(year==2153&&month==1&&day==1)break;len++;A temp;temp.y=year,temp.d=day,temp.m=month;hh[len]=temp;//  cout<<year<<month<<day<<endl;}if((year%4==0&&year%100!=0)||year%400==0){a[2]=29;}else{a[2]=28;}day++;xq++;if(xq>7)xq-=7;if(day>a[month]){month++;day=1;if(month>12){year++;month-=12;}}}for(int i=1;i<=2058;i++){A temp;temp.y=hh[i].y+400;temp.d=hh[i].d;temp.m=hh[i].m;len++;hh[len]=temp;}
}
int main()
{init();int T;scanf("%d",&T);while(T--){int Y,M,D,N;scanf("%d %d %d %d",&Y,&M,&D,&N);int temp=(Y-1753)/400;int temp1=Y-400*temp;for(int i=1;i<=2058;i++){if(hh[i].y==temp1&&hh[i].m==M&&hh[i].d==D){temp=i;break;}}N--;int t1=N/2058;int t2=Y+400*t1;N-=t1*2058;while(N--){temp++;}t2+=hh[temp].y-temp1;printf("%d %d %d\n",t2,hh[temp].m,hh[temp].d);}return 0;
}

ZOJ - 3939(日期规律)相关推荐

  1. ZOJ 3939 The Lucky Week (打表预处理/找规律)

    题目:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=115189#problem/C 代码: #include <cstdio> ...

  2. ZOJ - 3939 The Lucky Week【简单方法】

    题目 传送门 Sample Input 2 2016 4 11 2 2016 1 11 10 Sample Output 2016 7 11 2017 9 11 题意:t组数据,给出四个数,x,y,z ...

  3. 【打表找循环节】ZOJ - 3939 The Lucky Week

    Step1 Problem: 幸运日指,星期一是1 or 11 or 21号.给出第一个幸运日时间,问第n个幸运日的时间. 例如: 2016 4 11 2 输出: 2016 7 11 数据范围: 时间 ...

  4. The 13th Zhejiang Provincial Collegiate Contest(2016年浙江省赛)

      前4道水题就不说了,其中我做了C题,1Y,小心仔细写代码并且提交之前得确认无误后提交才能减少出错率. 结果后面2题都由波神做掉,学长带我们飞~ 终榜 官方题解   ZOJ 3946 Highway ...

  5. iPhone4S和iPad2的iOS5.0.1完美越狱

    查看文章     iPhone4S和iPad2的iOS5.0.1完美越狱 2012年03月07日 星期三 下午 9:48 哈哈 最新好消息! iPhone4S和iPad2的iOS5.0.1完美越狱工具 ...

  6. 职高高一计算机文化基础试题,计算机文化基础教案-Microsoft Excel 2000 (中职教育)...

    <计算机文化基础>授课教案<计算机文化基础>授课讲义 课程名称:计算机文化基础 课程内容: 第 6 章 电子表格处理软件第 6 章 电子表格处理工具授课对象:非计算机本科 1 ...

  7. ZOJ Monthly, January 2019 - A 规律

    题目链接:Little Sub and Pascal's Triangle 要求:求杨辉三角的任意一行有多少个奇数 首先找规律,发现你要求的第几行,就把对应于那行的序号转换为二进制后1的个数, 假设这 ...

  8. ZOJ问题(找规律,字符串处理)

    ZOJ问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  9. JSP学习笔记(五):日期处理、页面重定向、点击量统计、自动刷新和发送邮件...

    一.JSP 日期处理: 使用JSP最重要的优势之一,就是可以使用所有Java  API.本节讲述Java中的Date类,它在java.util包下,封装了当前日期和时间. Date类有两个构造函数.第 ...

  10. java遍历两个日期_java 已知两个日期,遍历出两个日期之间所有的日期,重点是::包括第一个日期!!...

    哈哈,又是日期类问题,那我肯定建议你用Java8的新时间API了,而且你时间字符串还是这种格式yyyy-MM-dd,直接LocalDate.parse方法就可以把字符串转化为LocalDate对象了 ...

最新文章

  1. 修Bug哪家强?谷歌:Linux,比我都修得好
  2. matlab imwrite函数保存jpg格式图像丢失数据或改变图像
  3. python与mysql数据库_python与MySQL数据库
  4. AudioRecorder 录音相关的处理流程
  5. .Net开源微型ORM框架测评
  6. Xshell配色为ubuntu风格
  7. VS2008下CEGUI 0.7.1的安装
  8. U盘美化(更换U盘logo和页面背景软件)
  9. iperf服务器如何显示收到的包速率,使用Iperf诊断网络速度
  10. 防范非法用户入侵系统秘籍
  11. QA | 关于手持式频谱仪,您想了解的那些技术问题(一)
  12. vue实现连接打印机功能
  13. java导出doc文档
  14. 第三方对接-支付宝支付
  15. 思科PC远程控制交换机和路由器
  16. 桃词典 Peach Dictionary 简易英语词典app开发 安卓软件开发 Part 5
  17. 直播平台软件开发都使用了什么协议呢?
  18. 【UE4】pawn 和 Character 的区别
  19. Advertising and public relations
  20. 基于java的中文分词工具ANSJ

热门文章

  1. PMBOK项目管理知识体系指南—PMP项目管理学习笔记。
  2. 完成一场未完成的相遇:在树图区块链上邂逅元宇宙里的加密艺术《四季合鸣》...
  3. IPX 、 IPEX 、 UFL连接器
  4. 流利阅读12.23 The 'great dying': rapid warming caused largest extinction event ever, report says
  5. Spring Cloud 全家桶简介
  6. 奇怪的sqlconnection.open错误
  7. 如何解决微信小程序加载慢的问题?
  8. 计算机怎么保存窗口画面,电脑视频怎么旋转保存 怎样将视频画面进行旋转并保存|视频画面旋转工具...
  9. mysql implode_PHP implode() 函数
  10. Kinect(XBOX360)相机在ROS下标定