60分 求助
查看原帖
60分 求助
398310
hundunqidian楼主2023/4/20 20:07

WA #2 #8 #9 #10

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll T,L,sum,y,m,d,h,minu,s;
int D=24*60*60,month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int run(int Y,int M){
	if(M!=2) return 0;
	if(Y%400==0 || (Y%100!=0 && Y%4==0)) return 1;
	return 0;
}
void f(){
	//1.补回本年的1月1日00:00:00 
	sum+=h*3600+minu*60+s;
	h=minu=s=0; d--;
	for(m;m>=1;m--){
		for(d;d>=1;d--){
			sum+=D;
		}
		d=month[m-1]+run(y,m-1);
	} 
	d=1; m=1;
	//if(sum!=(1<<16)) cout<<"NO";
	//2.1年为单位加
	while(sum>=((365+run(y,2))*D)){
		y++; sum-=(365+run(y,2))*D;
	} 
	//3.1月为单位加
	for(int i=1;i<=12 && sum>=(month[i]+run(y,i))*D;i++){
		sum-=(month[i]+run(y,i))*D;
		m++;
	}
	//4.1日为单位加
	for(int i=1;i<=month[m]+run(y,m) && sum>=D;i++){
		sum-=D;
		d++;
	}
	//5.1小时为单位加
	for(int i=1;i<24 && sum>=3600;i++){
		sum-=3600;
		h++;
	}
	//6.1分钟为单位加
	for(int i=1;i<60 && sum>=60;i++){
		sum-=60;
		minu++;
	}
	//7.1秒为单位加 
	s=sum;
	return ;
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	cin>>T;
	while(T--){
		cin>>L;
		sum=(1<<(L-1))-1;
		cin>>y>>m>>d>>h>>minu>>s;
		f();
		cout<<y<<' '<<m<<' '<<d<<' '<<h<<' '<<minu<<' '<<s<<endl;
	}
	return 0;
}
2023/4/20 20:07
加载中...