USACO Section1.1 Friday the Thirteenth 解题报告

    friday解题报告 —— icedream61 博客园(转载请注明出处)

------------------------------------------------------------------------------------------------------------------------------------------------
【题目】
  据说曾经的黑色星期五是13号?本题让我们看看13号与星期五是否比与别的日子更有缘。
  给出非负数n,请告诉我在“1900年1月1日”到“1900+n-1年12月31日”中,星期一到星期天各自有多少个13号。
  注意,输出时,顺序是周六、周日、周一、周二、周三、周四、周五,一共7个数,空格隔开。
【数据范围】
  n<=400
【输入样例】
  20
【输出样例】
  36 33 34 33 35 35 34
------------------------------------------------------------------------------------------------------------------------------------------------
【分析】
  做法很简单,每个月都有13号,所以枚举所有的月份就好了。过程中判断一下平年闰年,保证每月日子别算错就好。
------------------------------------------------------------------------------------------------------------------------------------------------
【总结】
  这题一看非负数,就觉得应该考虑n==0的特殊情况,结果数据里没有,有种被坑的感觉……
  这题写完交上去WA,一看发现输出要求是周六放在第一个……
  改完交上去又WA,这次怎么也找不出错来,结果要来了DYZ的AC代码,发现自己change函数三个return没写进if的大括号里,手生啊!
  顺带说一句,我的代码里对于n==0的特判其实可以略去;而DYZ的代码忘了对n==0特判了,恰好他的代码的确需要对n==0的特判,只能说这数据便宜他了-.-

------------------------------------------------------------------------------------------------------------------------------------------------

【代码】

 1 /*
 2 ID: icedrea1
 3 PROG: friday
 4 LANG: C++
 5 */
 6
 7 #include <iostream>
 8 #include <fstream>
 9 using namespace std;
10
11 int add[1+12]={ 0,31,28,31,30,31,30,31,31,30,31,30,31 };
12
13 ifstream in("friday.in");
14 ofstream out("friday.out");
15
16 int n,r[7];
17
18 void change(int y)
19 {
20     if(y%400==0) { add[2]=29; return; }
21     if(y%100==0) { add[2]=28; return; }
22     if(y%4==0) { add[2]=29; return; }
23     add[2]=28;
24 }
25 void work()
26 {
27     cout<<"in work"<<endl;
28     int state=6;
29     for(int y=1900;y<=1900+n-1;++y)
30     {
31         change(y); cout<<"y="<<y<<"\tday="<<add[2]<<endl;
32         for(int m=1;m<=12;++m)
33         {
34             ++r[state]; //cout<<"m="<<m<<"\tstate="<<state;
35             state=(state+add[m])%7; //cout<<"\tadd="<<add[m]<<endl;
36         }
37     }
38     out<<r[6]<<‘ ‘<<r[0]<<‘ ‘<<r[1]<<‘ ‘<<r[2]<<‘ ‘<<r[3]<<‘ ‘<<r[4]<<‘ ‘<<r[5]<<endl;
39 }
40
41 int main()
42 {
43     in>>n;
44     if(n==0) { out<<"0 0 0 0 0 0 0"<<endl; } else work();
45     in.close(); out.close();
46     return 0;
47 }
时间: 2024-08-11 03:51:18

USACO Section1.1 Friday the Thirteenth 解题报告的相关文章

USACO Section1.4 Mother&#39;s Milk 解题报告

milk3解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------------------------------------------------------------------------------------------[题目] 有三个桶,容量分别是A.B.C,开始C桶是满的. 你可以不断将某个桶的奶倒到另一个桶里,但只允许全倒过去,或者将后者倒满,前者留下

USACO Section1.2 Name That Number 解题报告

namenum解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------------------------------------------------------------------------------------------[题目] 你有一个手机,键盘如下所示: 2: A,B,C 5: J,K,L 8: T,U,V 3: D,E,F 6: M,N,O 9:

USACO Section1.3 Ski Course Design 解题报告

skidesign解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------------------------------------------------------------------------------------------[题目] N座山,每座山高度是0到100的整数.我们要调整山高,让最高的山和最低的山高度差不超过17. 将一座山的高度调整x,花费是

USACO Section1.5 Prime Palindromes 解题报告

pprime解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------------------------------------------------------------------------------------------[题目] 求a到b之间的所有回文素数(即又是素数又是回文数的数).[数据范围] 5<=a,b<=100,000,000[输入样例] 5

USACO Section1.3 Wormholes 解题报告

wormhole解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------------------------------------------------------------------------------------------[题目] 一个人在二维坐标系上走,方向永远是+x.此坐标系中有N个虫洞(N是偶数). 虫洞这东西,一旦两个配成一对,便可以形成“传送门

USACO Section1.2 Milking Cows 解题报告

milk2解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------------------------------------------------------------------------------------------[题目] N个农民,每个农民从L[i]到R[i]时间给奶牛挤奶.问最长的一直有人挤奶的时间,和最长的没有人挤奶的时间.[数据范围] 1<=N

USACO Section1.2 Transformations 解题报告

transform解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------------------------------------------------------------------------------------------[题目] 给出两个N×N的矩阵A和B,找出将A转换为B的方式中编号最小的,输出编号. #1:转90度:图案按顺时针转90度. #2:

USACO Section1.2 Palindromic Squares 解题报告

palsquare解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------------------------------------------------------------------------------------------[题目] 把1~300中,其平方在B进制下是回文数的数进行输出.每个数x输出一行,输出B进制下的x和x²,用空格隔开. 注意,10~

USACO Section1.5 Number Triangles 解题报告

numtri解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------------------------------------------------------------------------------------------[题目] 有一个数字的金字塔,形状如下    7   3 8  8 1 0 2 7 4 4 4 5 2 6 5 要从顶端开始走,每次只能向