ZOJ 3939 The Lucky Week
2016-06-05 23:14
337 查看
最后输出年份的时候公式算错了,应该用(n+l-1)/2058算出增加的年数,而y/400则代表原来的年数,她们最后相加乘以400再加上从表里搜索到的年数救赎所求年了。
打表时用到了蔡勒公式。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
struct year{
int y,m,d;
}lucky[5000];
int len=0;
bool luckyweek(int y,int m,int d)
{
int c=y/100;
y=y%100;
if(m==1) {y=y-1;m=13;}
else if(m==2) {y=y-1;m=14;}
int w=c/4-2*c+y+y/4+13*(m+1)/5+d-1;
if(w%7==1) return true;
else return false;
}
void solve()
{
for(int i=0;i<400;i++)
{
for(int j=1;j<=12;j++)
{
if(luckyweek(i,j,1)) {lucky[len].y=i;lucky[len].m=j;lucky[len].d=1;len++;}
else if(luckyweek(i,j,11)) {lucky[len].y=i;lucky[len].m=j;lucky[len].d=11;len++;}
else if(luckyweek(i,j,21)) {lucky[len].y=i;lucky[len].m=j;lucky[len].d=21;len++;}
}
}
}
int binary_search(int y,int m,int d)
{
int i=0,j=len;
int mid=0;
while(i<=j)
{
mid=(i+j)/2;
if(lucky[mid].y==y&&lucky[mid].m==m&&lucky[mid].d==d) return mid;
else if(lucky[mid].y>y) j=mid;
else if(lucky[mid].y==y&&lucky[mid].m>m) j=mid;
else if(lucky[mid].y==y&&lucky[mid].m==m&&lucky[mid].d>d) j=mid;
else i=mid;
}
return 0;
}
int main()
{
solve();
int t;
scanf("%d",&t);
while(t--)
{
int y,m,d,n;
scanf("%d%d%d%d",&y,&m,&d,&n);
int q=y%400;
int l=binary_search(q,m,d);
int p=(l+n-1)/2058+y/400;
int k=(l+n-1)%2058;
cout<<p*400+lucky[k].y<<" "<<lucky[k].m<<" "<<lucky[k].d<<endl;
}
return 0;
}
打表时用到了蔡勒公式。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
struct year{
int y,m,d;
}lucky[5000];
int len=0;
bool luckyweek(int y,int m,int d)
{
int c=y/100;
y=y%100;
if(m==1) {y=y-1;m=13;}
else if(m==2) {y=y-1;m=14;}
int w=c/4-2*c+y+y/4+13*(m+1)/5+d-1;
if(w%7==1) return true;
else return false;
}
void solve()
{
for(int i=0;i<400;i++)
{
for(int j=1;j<=12;j++)
{
if(luckyweek(i,j,1)) {lucky[len].y=i;lucky[len].m=j;lucky[len].d=1;len++;}
else if(luckyweek(i,j,11)) {lucky[len].y=i;lucky[len].m=j;lucky[len].d=11;len++;}
else if(luckyweek(i,j,21)) {lucky[len].y=i;lucky[len].m=j;lucky[len].d=21;len++;}
}
}
}
int binary_search(int y,int m,int d)
{
int i=0,j=len;
int mid=0;
while(i<=j)
{
mid=(i+j)/2;
if(lucky[mid].y==y&&lucky[mid].m==m&&lucky[mid].d==d) return mid;
else if(lucky[mid].y>y) j=mid;
else if(lucky[mid].y==y&&lucky[mid].m>m) j=mid;
else if(lucky[mid].y==y&&lucky[mid].m==m&&lucky[mid].d>d) j=mid;
else i=mid;
}
return 0;
}
int main()
{
solve();
int t;
scanf("%d",&t);
while(t--)
{
int y,m,d,n;
scanf("%d%d%d%d",&y,&m,&d,&n);
int q=y%400;
int l=binary_search(q,m,d);
int p=(l+n-1)/2058+y/400;
int k=(l+n-1)%2058;
cout<<p*400+lucky[k].y<<" "<<lucky[k].m<<" "<<lucky[k].d<<endl;
}
return 0;
}
相关文章推荐
- redis数据结构之dict 概要
- 快速排序
- Swift学习第十一枪-基于协议的MVVM模式的实现
- 常用树类数据结构总结-二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)的性能分析
- POJ 3419 Difference Is Beautiful(RMQ变形)
- 周末加班
- Aizu 2170 Marked Ancestor
- 正则表达式
- Apache 2.2 安装好后新建任意 PHP 文件访问时返回 500 Internal Server Error 解决方法
- C++第7次实验—特殊三位数
- PLG软件的运行环境设置
- OpenCV3.1.0+VS2013配置
- 上传文件保存到数据库
- 直流电机调速仿真作业
- Writer输出流写到文件(追加方式)
- request error请求错误S7-200 PLC连接step 7
- MySQL慢查询的定位与优化
- C++第七次实验
- c++作业7
- css annimate动画