【题目传送门】
复杂模拟题
AC代码
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
long long n, y, r, s, f, m, bit;
const long long F = 60, S = F * 60, R = S * 24;
long long month[20] = {365, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
void run(const long long &);
void nian();
void yue();
void ri();
void shi();
void fen();
void miao();
void jin();
void jian();
int main() {
freopen("cpp.in", "r", stdin);
freopen("cpp.out", "w", stdout);
long long t;
scanf("%lld", &t);
while (t--) {
scanf("%lld%lld%lld%lld%lld%lld%lld", &bit, &n, &y, &r, &s, &f, &m);
bit = (long long)(1ll << bit - 1) - 1;
jian();
nian();
yue();
ri();
shi();
fen();
miao();
jin();
printf("%lld %lld %lld %lld %lld %lld\n", n, y, r, s, f, m);
}
return 0;
}
void jian() {
run(n);
for (int i = 1; i < y; ++i) {
bit += month[i] * R;
}
bit += (r - 1) * R;
bit += s * S;
bit += f * F;
bit += m;
s = f = m = 0;
r = y = 1;
}
void nian() {
while (1) {
run(n);
if (bit >= month[0] * R) {
bit -= month[0] * R;
} else {
break;
}
++n;
}
}
void yue() {
while (1) {
if (bit >= month[y] * R) {
bit -= month[y] * R;
} else {
break;
}
++y;
jin();
}
}
void ri() {
r += bit / R;
bit %= R;
jin();
}
void shi() {
s += bit / S;
bit %= S;
jin();
}
void fen() {
f += bit / F;
bit %= F;
jin();
}
void miao() {
m += bit;
jin();
}
void jin() {
f += m / 60;
m %= 60;
s += f / 60;
f %= 60;
r += s / 24;
s %= 24;
if (y > 12) {
n += y / 12;
y %= 12;
run(n);
}
if (r > month[y]) {
long long temp = y;
y += r / month[y];
r %= month[temp];
}
if (y > 12) {
n += y / 12;
y %= 12;
run(n);
}
}
void run(const long long &n) {
(((n % 4 == 0 && n % 100 != 0) || (n % 400 == 0)) ? (month[2] = 29, month[0] = 366) : (month[2] = 28, month[0] = 365));
}