大样例都对了,但就10分,求调
查看原帖
大样例都对了,但就10分,求调
222744
WangShaoQ楼主2023/10/4 22:34
#include <bits/stdc++.h>
using namespace std;
int q;
int mon1[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int mon2[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
void solve1(int k) {
	int y = -4713, m = 1, d = 1;
	if (k >= 366) k -= 366, y++;
	y += k / 1461 * 4, k %= 1461;
	y += k / 365, k %= 365;
	if ((y + 1) % 4 == 0) {
		for (int i = 1; i <= 12; i++) {
			if (k >= mon2[i]) k -= mon2[i], m++;
			else break;
		}
		cout << 1 + k << " " << m << " " << y * (-1) << " BC" << endl;
		return;
	} else {
		for (int i = 1; i <= 12; i++) {
				if (k >= mon1[i]) k -= mon1[i], m++;
			else break;
		}
		cout << 1 + k << " " << m << " " << y * (-1) << " BC" << endl;
		return;
	}
}
void solve2(int k) {
	int y = 1, m = 1, d = 1;
	y += k / 1461 * 4, k %= 1461;
	y += k / 365, k %= 365;
	if (y % 4 == 0) {
		for (int i = 1; i <= 12; i++) {
			if (k >= mon2[i]) k -= mon2[i], m++;
			else break;
		}
		cout << 1 + k << " " << m << " " << y << endl;
		return;
	} else {
		for (int i = 1; i <= 12; i++) {
				if (k >= mon1[i]) k -= mon1[i], m++;
			else break;
		}
		cout << 1 + k << " " << m << " " << y << endl;
		return;
	}
}
void solve3(int k) {
	if (k < 78) {
		if (k <= 16) cout << 15 + k << " " << 10 << " " << 1582 << endl;
		else if (k <= 16 + 30) cout << 1 + k - 17 << " " << 11 << " " << 1582 << endl;
		else cout << 1 + k - 47 << " " << 12 << " " << 1582 << endl;
		return;
	}
	int y = 1583, m = 1, d = 1;
	k -= 77;
	int cnt = 0;
	if (k < 6576) {
		for (int i = 0; i <= 17; i++) {
			int t = y + i;
			if (t % 4 == 0) {
				if (k >= 366) cnt++, k -= 366;
				else break;
			} else {
				if (k >= 365) cnt++, k -= 365;
				else break;
			}
		}
		y = y + cnt;
		if (y % 4 == 0) {
			for (int i = 1; i <= 12; i++) {
				if (k >= mon2[i]) k -= mon2[i], m++;
				else break;
			}
			cout << 1 + k << " " << m << " " << y << endl;
			return;
		} else {
			for (int i = 1; i <= 12; i++) {
				if (k >= mon1[i]) k -= mon1[i], m++;
				else break;
			}
			cout << 1 + k << " " << m << " " << y << endl;
			return;
		}
	}
	y = 1601; k-= 6576;
	y += k / 146097 * 400, k %= 146097;
	y += k / 36524 * 100, k %= 36524;
	y += k / 1461 * 4, k %= 1461;
	y += k / 365, k %= 365;
	if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) {
		for (int i = 1; i <= 12; i++) {
			if (k >= mon2[i]) k -= mon2[i], m++;
			else break;
		}
		cout << 1 + k << " " << m << " " << y << endl;
		return;
	} else {
		for (int i = 1; i <= 12; i++) {
				if (k >= mon1[i]) k -= mon1[i], m++;
			else break;
		}
		cout << 1 + k << " " << m << " " << y << endl;
		return;
	}
}
int main() {
	cin >> q;
	while (q--) {
		int r;
		cin >> r;
		if  (r < 1721424) solve1(r);
		else if (r < 1721424 + 577737) solve2(r - 1721424);
		else solve3(r - 1721424 - 577737);
	}
	return 0;
}
2023/10/4 22:34
加载中...