#10TLE求条
查看原帖
#10TLE求条
1288333
XURUIFAN楼主2025/6/21 09:59

test link
code:

#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 day[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
inline void dty(int ds, int ys, ll &r, int &y, int s) {
	int x = r / ds;
	y += s * x * ys;
	r -= x * ds;
	if (r == 0) {
		r += ds;
		y -= s * ys;
	}
}
inline void solve() {
	ll r;
	cin >> r;
	r++;
	if (r <= 1721424) {
		int m = 1, y = 4713;
		dty(1461, 4, r, y, -1);
		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 <= 2299161) {
		r -= 1721424;
		int m = 1, y = 1;
		dty(1461, 4, r, y, 1);
		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 -= 2298874;
		int m = 1, y = 1582;
		for (; y <= 1600;) {
			int ds = 365;
			if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) ds++;
			if (r > ds) {
				r -= ds;
				y++;
			} else break;
		}
		dty(146097, 400, r, y, 1);
		while (1) {
			int ds = 365;
			if ((y % 4 == 0 && y % 100 != 0) || (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/21 09:59
加载中...