40pts求调
查看原帖
40pts求调
1518415
huangxiaobai114824楼主2024/10/18 14:08
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#define Max(a,b) (((a)>(b))?(a):(b))
#define Min(a,b) (((a)<(b))?(a):(b))
#define L(i,j,k) for(int i=(j);i<=(k);i++)
#define R(i,j,k) for(int i=(j);i>=(k);i--)
using namespace std;
const int Mxn=1e5+100;
const int Mxm=1e7+100;
const int Maxr=1e7+100;
const int Dayy400=97*366+(400-97)*365;
const int Dayy4=365*3+366;
const int sq1582=(31+28+31+30+31+30+31+31+30+31+4);
int q,Day=1,Month=1,Year=-1e9;
int jd=1,jm=1,jy=-4712;
bool isBC=false;
int Months[13]= {0,31,29,31,30,31,30,31,31,30,31,30,31};
int D400[401]= {0};
int cy[Maxr+10],cm[Maxr+10],cd[Maxr+10];
bool isry(int y) {
	if(y>1582) {
		if((y%400==0)||(y%4==0&&y%100!=0))return true;
	} else if(y<1582) {
		if(y%4==0)return true;
	}
	return false;
}
void mysolve() {
	int ty=jy;
	int tm=1;
	int td=1;
	int m=1;
	int Dayy=Dayy400;
	L(i,1,Maxr) {
		td++;
		//if(i==x+1)break;
		if(ty==1582&&tm==10&&td==5) {
			td=15;
		} else if(tm==12) {
			if(td==Months[tm]+1) {
				ty++;
				td=1;
				tm=1;
				if(isry(ty))Months[2]=29;
				else Months[2]=28;
			}
		} else if(td==Months[tm]+1) {
			td=1;
			tm++;
		}
		cy[i]=ty;
		cm[i]=tm;
		cd[i]=td;
		
	}
}
int main() {
	scanf("%d",&q);
	mysolve();
	L(i,1,q) {
		Day=1;
		Month=1;
		Year=-1e9;
		//Months[2]=28;
		isBC=false;
		int r;
		scanf("%d",&r);
		if(cy[r]<=0)isBC=true;
		if(isBC)printf("%d %d %d BC\n",cd[r],cm[r],-1*(cy[r]-1));
		else printf("%d %d %d\n",cd[r],cm[r],cy[r]);
	}
	return 0;
}

理论能过80的,求调,玄关

2024/10/18 14:08
加载中...