題目傳送門
給一種二分的做法?
我們考慮先做 西元前 4713∼1
4713 \sim 1
4713∼1
年,我們預處理經過整 x
xx 年需要幾天。那麼我們可以快速算出 n
nn 天是在哪一年?
找到那一年我們只要 12 個月份依次模擬一遍即可。這樣已經可以得到 40
4040
分。然後我們考慮公園 $1 \sim 10^9 $ 年。我們考慮二分 n
nn 天後在哪一年。我們首先要從公元 1
11 年開始二分,所以 n
nn 要減去 1721424 。二分如何判定?假設當前年為 yea
ryear
year
。如果 yea
r≤
1582
year\leq 1582
year≤1
582 那麼閏年個數即為 yea
r4
\frac
4year
,那麼到 yea
ryear
year
年的天數為: 365×y
ear+
(yea
r4
)365\times year+(\frac)
365×ye
ar+(
4yea
r)
否則稍微容斥一下得到閏年個數為:gs=
15824+
year
4−
15814+
year
400−
15814−
year
100+
1581
4gs=\frac+\frac-\frac+\frac-\frac-\frac+\frac
gs=415
82+
4yea
r−4
1581
+40
0yea
r−4
1581
−10
0yea
r+4
1581
,那麼到 yea
ryear
year
年的天數為: 365×y
ear+
gs−10
365\times year+gs-10
365×ye
ar+g
s−10
減去 10
1010
是因為 1582
1582
1582
年有 10
1010
天是要去掉的。
最後我們只要再列舉 12
1212
個月份即可,注意細節!!
時間複雜度 o(q
×log(
109)
+q×12
)o(q\times \log(10^9)+q\times 12)
o(q×
log(10
9)+q
×12)
#include
#define for(i,a,b) for ( int i=(a);i<=(b);i++ )
#define dow(i,a,b) for ( int i=(a);i>=(b);i-- )
#define int long long
using
namespace std;
inline
intread()
int q,n,fl,day[15]
,sum[
3000005
],sum1[
3000005
],sumt[
3000005];
inline
void
first_step()
else
n=0;
}}}}
inline
void
third_step()
int year=x+1;
if(year<=
1582
) n-
=(x*
365+
(x/4ll))
;else n-
=(x*
365+
(1582ll
/4ll)+
(x/4ll)-
(1581ll
/4ll)+
(x/400ll)-
(1581ll
/400ll)-
(x/100ll)+
(1581ll
/100ll)-
10);if
(!n)
printf
("%d %d %d\n",1
,1,year)
;else
if(year==
1582
&&j==10)
if(n>=day) n-
=day;
elseif(
!fl)
else
if(j!=12)
printf
("%d %d %d\n",1
,j+1
,year)
;else
printf
("%d %d %d\n",1
,1,year+1)
; n=0;
}}}}
signed
main()
return0;
}
CSP2020試題解法與總結(遊記)
考試前一天晚,沒上競賽課,教練叫我們在家做題,別說不愧是信心賽題目都海星,做完後就睡覺了不過有一道題資料好像錯了 早上6 00就起床了,可能是想跟著大部隊吧,沒有直接去考場而是去了學校,一行人都上了車,不過初一是在是太吵了 跟我們初一時一樣 上了車跟一旁的yzk一起背了一下模板然後差不多就到了nk。...
CSP2020試題解法與總結(遊記)
考試前一天晚,沒上競賽課,教練叫我們在家做題,別說不愧是信心賽題目都海星,做完後就睡覺了不過有一道題資料好像錯了 早上6 00就起床了,可能是想跟著大部隊吧,沒有直接去考場而是去了學校,一行人都上了車,不過初一是在是太吵了 跟我們初一時一樣 上了車跟一旁的yzk一起背了一下模板然後差不多就到了nk。...
上古退役選手康復訓練1 CSP2020J 2
你沒看錯,乙個前noi ag選手來做普及組了,馬上打icpc了我也準備練習一些。連pj都不會了,得分 100 100 30 100 330,甚至比初三還菜,nowcoder資料,思路也應該是這個分。寫一發題解吧 t3就寫30分的 t1奇數直接輸出 1,偶數按二進位制位拆分 includeusing ...