求调QwQ样例都对,但8WA2TLE
查看原帖
求调QwQ样例都对,但8WA2TLE
1127998
Hanyishuo楼主2024/11/1 22:58
#include<bits/stdc++.h>
using namespace std;
const int maxn = 110000;
const int qwq1 = 1721424;
const int qwq2 = 2299151;
const int qwq3 = 2299161;
const int mon[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int Q, r;
int d = 0, dd = 0, m = 0, day = 0, year = 4713, y, num = 0;

bool BC_check(int x){
	if(x % 4 == 1) return 1;
	return 0;
}

bool AC_check(int x){
	if(((x%4 == 0)&&(x%100 != 0)) || (x%400 == 0)) return 1;
	return 0;
}

void update(){
	d = 0; dd = 0; m = 0; day = 0; year = 4713; y = 0; num = 0;
}

int main(){
	cin >> Q;
	while(Q--){
		cin >> r;
		update();
		if(r < qwq1){
			for(int i = 4713; i >= 1; i--){
				if(r > d){
					d += 365;
					continue;
				}
				else{
					int ds = d - r;
					year = i + 1;
					bool can = BC_check(year);
					for(int j = 12; j >= 1; j--){
						dd += mon[j];
						if(j == 2 && can) dd ++;
						if(dd <= ds) continue;
						else if(dd > ds){
							m = j;
							day = dd - ds;
							break;
						}
					}
					break;
				}
			}
			cout<<day<<" "<<m<<"  "<<year<<" "<<"BC"<<'\n';
		}
		else if(r == qwq1) cout<<'1'<<" "<<'1'<<"  "<<'1'<<" "<<'\n';
		else{
			update();
			if(r > qwq1 && r < qwq2){
				r = qwq2 - r + 1;
				d = 277;
				for(int i = 1581; i >= 1; i--){
					if(r > d){
					if(AC_check(i)) d += 366;
					else d += 365;
					continue;
				}
				else{
			    	int ds = d - r;
					year = i + 1;
					bool can = AC_check(year);
					for(int j = 1; j <= 12; j++){
						dd += mon[j];
						if(j == 2 && can) dd ++;
						if(dd <= ds) continue;
						else if(dd > ds){
							m = j;
							day = dd - ds;
							break;
						}
					}
					break;
				}
		    }
		    cout<<day<<" "<<m<<" "<<year<<'\n';
			}
		else if(r > qwq3){
			update();
			r = r -qwq3 + 1;
			d = 78;
			for(int i = 1; i*400 <= r; i++){
				if(r > d){
					y = (i - 1) * 400;
					d += 146097;
					continue;
				}
			}
			d -= 146097;
		    for(int j = 1; j <= 400; j++){
			  	if(r > d){
			   		num = 1582 + y +j;
			   		if(AC_check(num)) d += 366;
				    else d += 365;
	        		continue;
		        }
		       	int ds = d - r;
				year = num;
			   	bool can = AC_check(year);
			   	for(int k = 12; k >= 1; k--){
		    		dd += mon[k];
		    		if(k == 2 && can) dd++;
		    		if(dd <= ds) continue;
					else if(dd > ds){
						m = k;
						day = dd - ds;
						break;
						}
					}
					break;
			    }
		    cout<<day<<" "<<m<<" "<<year<<'\n';
			}
		}
	}
	return 0;
}
2024/11/1 22:58
加载中...