题解(速解)
使用基姆拉尔森计算公式可以快速计算第y年第m月第d日是星期几。
#include <bits/stdc++.h>
using namespace std;
int whatday(int y, int m, int d)
{
if (m == 1 || m == 2) m += 12, y--;
return (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400 + 1) % 7;
}
int main() {
int n;
cin >> n;
unordered_map<int, int> mmp;
for(int i = 1900; i < 1900 + n; i++)
for(int j = 1; j <= 12; j++)
mmp[whatday(i, j, 13)]++;
for(int i = 6; i <= 12; i++) cout << mmp[i % 7] << " ";
return 0;
}
解法二:直接模拟法
太水了就不写了....