当前位置: 代码迷 >> 综合 >> Tyvj P1354 日历
  详细解决方案

Tyvj P1354 日历

热度:22   发布时间:2024-01-19 02:52:12.0

背景

由于特别期待Boolean立冬欢乐赛,某B每天都在看日历, 他从某年盼啊盼,盼啊盼突然杯具地发现自己已错过了比赛的时间,而现在的时间是:2010年12月31日星期五……

描述

在回顾自己的期盼历程的时候,某B希望知道他到底浪费了多少个月考的时间。这里定义月考那天不仅是30号还是星期五【一个条件没有达到那个月都不会进行月考】...(因为星期六要放假.....),而月考只考一天。(也就是说2月没有月考^_^)。于是他找到了编程高手——你。

输入格式

输入仅有一个数,N。表示某B是从N年的12月31日24:00(也就是第二年的第一天)开始期盼的。
    <保证2010>=N>=1582.>

输出格式

输出仅有一个数,M。表示某B一共荒废了多少个月考的日子(以天为单位)。


测试样例1

输入

2009

输出

2

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

神奇的蔡勒公式的应用~应该算是数论~

蔡勒公式用来计算某年某月某日是星期几年份要大于1582,公式是:

W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1

其中,

w:星期; w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六
c:世纪(年份前两位数)
y:年(后两位数)
m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算)
d:日
[ ]代表取整,即只要整数部分。
然后就是模拟了~

评测机离线了,所以我的程序并没有测过……但是这种模拟题还看什么程序嘛!


#include<cstdio>int tot,bi;bool pan(int u,int v)
{int ans=(u/100)/4-(u/100)*2+u%100+(u%100)/4+13*(v+1)/5+30-1;while(ans<0) ans+=7;ans%=7;if(ans==5) return 1;return 0;
}int main()
{scanf("%d",&bi);for(int i=bi+1;i<=2010;i++)for(int j=3;j<=13;j++) if(pan(i,j)) tot++;printf("%d\n",tot);return 0; 
}