2021 年百度之星·程序设计大赛 - 初赛一、二
生活随笔
收集整理的這篇文章主要介紹了
2021 年百度之星·程序设计大赛 - 初赛一、二
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
感覺難度比去年大,也可能是我變菜了
第一場
1001迷失
傳送門
1003 鴿子
傳送門
1004 萌新
void solve(){ll a=read,b=read;if(b>a) swap(a,b);ll tmp=a-b;ll res_max=a-b,res_min=0;if(!tmp) res_max=a,res_min=2;rep(i,2,tmp/i){if(tmp%i==0){res_min=i;break;}}if(!res_min) res_min=tmp;if(res_min<=1||res_max<=1){printf("-1 -1\n");return ;}printf("%lld %lld\n",res_min,res_max); }int main(){int _=read;while(_--) solve();return 0; }1006 毒瘤數(shù)據(jù)結(jié)構(gòu)題
- 思路:
首先對于查詢操作,是滿足單調(diào)性的,我們可以二分答案,那么怎么checkcheckcheck呢,如果對于當(dāng)前的midmidmid,[1,mid?1][1,mid-1][1,mid?1]的和為mid?1mid-1mid?1,說明該點(diǎn)符合題意,還可以更大,lll指針右移。
對于修改操作,相當(dāng)于單點(diǎn)修改。
大體思路就是對答案進(jìn)行二分,借用某數(shù)據(jù)結(jié)構(gòu)維護(hù)單點(diǎn)修改和區(qū)間求和。
容易想到的是線段樹跟樹狀數(shù)組,賽時是用樹狀數(shù)組寫的,復(fù)雜度O(nlog2n)O(nlog^{2}n)O(nlog2n)
交了后宇巨說第二個查詢的答案一定是單調(diào)遞增的,所以應(yīng)該有O(n)O(n)O(n)的寫法。
然后hduojhduojhduoj評測機(jī)的問題導(dǎo)致O(n)O(n)O(n)的寫法都會TLETLETLE,知道思想就好了。 - 代碼:
1008 獵人殺
- 思路:
模擬;要注意的點(diǎn)為:
1.1.1.狼人可以殺死自己,獵人不可以殺死自己
2.2.2.注意每次殺人的時候都是選擇最靠前并且未死亡的,所以每次要從111開始遍歷 - 代碼:
第二場
1001 簽到
- 思路
找規(guī)律,寫出前777項(xiàng)就好了
| 0 | a | b |
| 1 | a+b | a-b |
| 2 | 2a | 2b |
| 3 | 2a+2b | 2a-2b |
| 4 | 4a | 4b |
| 5 | 4a+4b | 4a-4b |
| 6 | 8a | 8b |
| 7 | 8a+8b | 8a-8b |
分奇偶討論一下就好了,注意取模。
- 代碼:
1002 隨機(jī)題意
- 思路:
對于每個b[i]b[i]b[i]的范圍為[ai?k,ai+k][a_{i}-k,a_{i}+k][ai??k,ai?+k]
排序后從頭開始掃,貪心的選擇。
每次都盡量選擇每個區(qū)間最左邊的。 - 代碼:
1003 魔怔
傳送門
1004 凈化
- 思路:
首先,盡量找到分界點(diǎn),在分界點(diǎn)之后,所有的負(fù)數(shù)都不會使得遍歷完的答案減少,也就是說,分界點(diǎn)之后的每次的變化都是固定的,設(shè)為cntcntcnt。
其次,如果這時候已經(jīng)滿足x>=mx>=mx>=m,就輸出答案;不滿足的話,就計算出每次增加cntcntcnt,直至x>=mx>=mx>=m的次數(shù)。
但是這樣會出現(xiàn)一個問題,有可能在某次遍歷的過程中,x>=mx>=mx>=m已經(jīng)滿足了,但是后面有負(fù)數(shù),就導(dǎo)致了這次遍歷完成后,x>=mx>=mx>=m又不滿足了,這樣就使得答案增大。
解決方案是提前記錄前綴和的最大值,在計算每次增加cntcntcnt增加多少次能夠滿足x>=mx>=mx>=m的時候,提前將最大值減去。 - 代碼:
總結(jié)
以上是生活随笔為你收集整理的2021 年百度之星·程序设计大赛 - 初赛一、二的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(2150):webpack之配
- 下一篇: “约见”面试官系列之常见面试题第十五篇之