usaco3

/*
ID:marco
LANG:C++
TASK:friday
*/
#include<bits/stdc++.h>
#define for(i,k,n) for (int i = k; i <= n; i++)

using namespace std;

const
int MAXN = 110,
DAYS[2][13] = {{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};
int
n, ans[MAXN];

int getyear(int a)
{
if ((a % 400 == 0)||((a % 4 == 0)&&(a % 100 != 0)))
return 1;
return 0;
}

int main()
{
int year, day = 13;
freopen("friday.in","r",stdin);
freopen("friday.out","w",stdout);
cin >> n;
ans[6] = 1;
for(i,1,n)
{
year = 1900 + i - 1;
for(j,1,12)
{
day += DAYS[getyear(year)][j];
ans[day % 7]++;
}
}
ans[day % 7]--;
cout << ans[6];
for (i,0,5)
cout << " " << ans[i];
cout << endl;
}

时间: 2024-10-13 12:17:02

usaco3的相关文章

usaco-3.1-PROB Shaping Regions-漂浮法

漂浮法,顾名思义,就是一块块的往上飘. 以逆序来进行放置,即n to 1.逆序的好处在于放置一个矩形后,俯视看到的就是最终俯视该矩形应该看到的.因为挡着它的矩形在之前已经放置好了,所以可直接统计,为递归创造了条件.每放一个矩形,可以想象成将其扔入一密度很大的海水底部,海分成了n层,然后矩形开始向上浮.在上浮过程中若碰撞到其他的矩形则断裂成几个小矩形,继续上浮,直到浮出水面.于是想到用个递归来模拟上浮过程. /* ID: rowanha3 LANG: C++ TASK: rect1 */ #inc

[usaco3.2.3]spin

这道题直接枚举就好了,但我当时竟然没想到,我真是太失败了.....Q_Q /* ID:abc31261 LANG:C++ TASK:spin */ #include<cstdio> #include<cstring> #include<iostream> using namespace std; const int n=5,maxn=360; int s[10],first[10][10],end[10][10],num[10],f[maxn*2]; bool flag

[usaco3.2.5]msquare

题目传送门:http://www.nocow.cn/index.php/Translate:USACO/msquare 这道题bfs+hash,但想到要判重的数字不多,就直接用了map,数组传递有些麻烦,所以直接写在了一起,会有点乱 /* ID:abc31261 LANG:C++ TASK:msquare */ #include<cstdio> #include<cstring> #include<queue> #include<map> #include&

USACO--3.2Sweet Butter+推优化的Dijkstral算法

这个题目思路是很简单的,我们只需要枚举每个顶点作为目的地,然后再取其中距离总和最小的作为答案.开始的时候我用的是floyd一次就将所有点之间的最小距离求出来,但是超时了. 后面每次枚举一个点就用堆优化的dijkstral求一次这个点到其余点的最短路,这样就可以过了.算法中还用数组模拟了图的邻接矩阵. 代码如下: /* ID: 15674811 LANG: C++ TASK: butter */ #include<iostream> #include<cstdio> #include

usaco-3.4-rockers-passed

又是一个背包问题,动态规划求解: /* ID: qq104801 LANG: C++ TASK: rockers */ #include <iostream> #include <fstream> #include <cstring> #include <vector> #include <queue> #include <stack> #include <algorithm> using namespace std; #

[USACO3.3.3]camelot

题目传送门:http://www.nocow.cn/index.php/Translate:USACO/camelot 这道题让我心痛,一开始写写不出,后来拖了很久,决定去看题解,没想到又看不懂官方题解,唉!后来看了下面的题解做了出来.题解的话,大概就是先预处理每个格子到另外格子的位置,再枚举在王的坐标+-2位置接王,枚举所有棋子的集中点加起来计算就好了.我的代码为了方便略粗鲁. 题解传送门:http://www.nocow.cn/index.php/USACO/camelot /* ID:ab

[usaco3.2.4]ratios

题目传送门:http://www.nocow.cn/index.php/Translate:USACO/ratios 这道题也是直接枚举... /* ID:abc31261 LANG:C++ TASK:ratios */ #include<cstdio> #include<cstring> #include<iostream> using namespace std; int a[5][5]; int main() { int i,j,l,k,p,ansmin=0x7f

[usaco3.2.2]kimbits

这道题又是看了题解. 思想大概是:我们枚举到i位数有j个1,用杨辉三角形求组合数,第i行第j列就是C(i-1,j-1),用sum[i][j]表示i位数0..j个1的所有的数的个数,那么sum[i][j]=C(i,0)+C(i,1)+......+C(i,j),那么当我们求第k个数时,当sum[i-1][j](i-1位数,0...j个1的方案数)<k时,意味着第i位是1,否则是0,以此类推. /* ID:abc31261 LANG:C++ TASK:kimbits */ #include<cst

[usaco3.2.1]fact4

这题一开始我想了又想,谁知道最后竟然一个暴力的高精度过了,官方的题解好像是用了一些数学的方法. /* ID:abc31261 LANG:C++ TASK:fact4 */ #include<cstdio> #include<cstring> #include<iostream> using namespace std; const int maxn=5000; int num[maxn],len; void cheng(int numa) { int i,x=0; fo

[usaco3.1.2]inflate

一开始想把他们分成一件件来做01背包(是在下输了),然后发现直接来一个完全背包就可以了(严重打击自信心),然后再来一个大牛的实用优化(但貌似我写得很拙),看来我还是太年轻了. 1 /* 2 ID:abc31261 3 LANG:C++ 4 TASK:inflate 5 */ 6 #include<cstdio> 7 #include<cstring> 8 #include<iostream> 9 using namespace std; 10 const int max