題解 CSP 2020S T1 儒略日

2021-10-10 11:22:59 字數 2743 閱讀 9813

題目傳送門

給一種二分的做法?

我們考慮先做 西元前 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 ...