洛谷_P2655 2038年问题(尚贤)

【题目传送门】

复杂模拟题

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));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值