30pts WA*6TLE*1求条
查看原帖
30pts WA*6TLE*1求条
1288333
XURUIFAN楼主2025/6/18 21:41

RT,必关
test link

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
typedef  pair<int, int> PII;
typedef  pair<ll, ll> PLL;
typedef  pair<int, ll> PIL;
#define mkp make_pair
#define F first
#define S second
#define psbk push_back
int Q;
const ll p1 = 1721424, p2 = 577737, day[] {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
inline void solve() {
	ll r;
	cin >> r;
	r++;
	if (r <= p1) {
		int m = 1, y = 4713;
		int x = r / 1461;
		y -= x * 4;
		r -= x * 1461;
		while (1) {
			int ds = 365;
			if (y % 4 == 1) ds++;
			if (r > ds) {
				r -= ds;
				y--;
			} else break;
		}
		for (; m <= 12;) {
			int dm = day[m];
			if (m == 2 && y % 4 == 1) dm++;
			if (r > dm) {
				r -= dm;
				m++;
			} else break;
		}
		cout << r << " " << m << " " << y << " BC\n";
	} else if (r <= p1 + p2) {
		r -= p1;
		int m = 1, y = 1;
		int x = r / 1461;
		y += x * 4;
		r -= x * 1461;
		while (1) {
			int ds = 365;
			if (y % 4 == 0) ds++;
			if (r > ds) {
				r -= ds;
				y++;
			} else break;
		}
		for (; m <= 12;) {
			ll dm = day[m];
			if (m == 2 && y % 4 == 0) dm++;
			if (r > dm) {
				r -= dm;
				m++;
			} else break;
		}

		cout << r << " " << m << " " << y << "\n";
	} else {
		r -= p1 + p2 - 15 - 273 + 1;
		int m = 1, y = 1582, z, x;

		//400
		z = 365 * 400 + 97;
		x = r / z;
		r -= x * z;
		y += 400 * x;

		//100
		z = 365 * 100 + 24;
		x = r / z;
		r -= x * z;
		y += 100 * x;

		//4
		z = 365 * 4 + 1;
		x = r / z;
		r -= x * z;
		y += 4 * x;

		while (1) {
			int ds = 365;
			if ((y % 4 == 0 && y % 100) || (y % 400 == 0)) ds++;
			if (r > ds) {
				r -= ds;
				y++;
			} else break;
		}
		for (; m <= 12;) {
			int dm = day[m];
			if (m == 2 && ((y % 4 == 0 && y % 100) || (y % 400 == 0))) dm++;
			if (r > dm) {
				r -= dm;
				m++;
			} else break;
		}
		cout << r << " " << m << " " << y << "\n";
	}
}
int main() {
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);
//	freopen("julian3.in", "r", stdin);
//	freopen("ans.out", "w", stdout);
	cin >> Q;
	while (Q--) solve();
	return 0;
}
2025/6/18 21:41
加载中...