退役划水(24)/2022 MetaCamp程序設計大賽線上初賽2

引流封面圖(?)


 

差點忘了。寫到後邊纔想起來,於是回來補上

上一次的密碼似乎並沒有人去破譯,於是就把解答附上吧

(其實不算是密碼學?)

 

 (我連負號都沒刪,一堆負數給人的感覺不就是…)

(爲什麼刪了逗號?因爲我把字符串輸入再輸出的時候,輸出格式忘加逗號和空格了就直接連起來了,還懶得改了


 

昨晚打Metabit的比賽,打了第14名

獲得了參加線下賽的資格

線下賽可以去北京玩,包喫住,交通報銷

打比賽進前14有獎金(雖然跟我沒啥關係)。但主要是有好玩的

而且我也想撈一撈各個企業的HR微信,指不定以後有點啥用

所以本來21-23號沒什麼事,打算參與的(雖然不可能拿獎)

結果科三掛了。從明天開始算起,10天后才能再次預約考試

時間完美的撞上了

結果好端端的機會就沒了


 從這裏開始的部分是0:00之後寫的,所以“今天”“明天”等的定義可能與上文不同

科三考試要排隊領號。於是早上8點去了,倒數第三(165號)

怎麼這也能這麼卷啊

除了VIP能保前三四十號,

剩下的人什麼凌晨三四點去取號就六十多號了

六點多去就一百多了

這都啥啊

於是不出預料的,考試就等到了傍晚

然後在下班點各種社會車輛開始亂竄

打死也想不到居然是在掉頭掛的。

掉頭的時候對面來了仨社會車輛嗖嗖得就過了

我剛想踩剎車停下等他們都過去

結果安全員估計是看到下半晚高峯的社會車輛自己也着急下班了,比我先踩的

掛了

 

就很無語

當初爲啥報的C1,這不活活受罪

一起學車的4個人無一例外的都掛科了

然而C1的科二都過了,科三不過感覺虧得慌

(爲啥都說科二難啊?我看今天科三通過率也就百分之二三十,科二也沒這麼低啊)

DC一如既往的倒黴

練車練到一半,考試規則(車型)改了

於是練車4天裏,第一天教燈光

一換車又亂了套了

手動擋科三我是真不覺得簡單,練4天就能過也太強了


 心情很爛

本來之前終於搞定了博客園傳視頻的問題了

想往博客上再傳一點打歌

今天科三裂開了,直接反向紫菜

最開始是打算錄一個唱打Testify掛博客遺臭萬年的(當然只能打PRS,剩下的打不動)

結果打歌的時候經常跟不上英文單詞的速度,說得不夠流利

本來就唱歌不好聽,更離譜的是一晚上了也沒全連

如果有人有興趣的話,今天我可以再試試(什麼不良癖好)

中午也是,打pgr的nhelv打了倆小時,一直失誤

3good - 2good1miss - 2g2m - 1g2m - 6g - 6g - 5g - 1g1m

繃不住了,不打了

是幹啥啥不行的一天

這麼說就不對了,本來就是幹啥啥不行一人

/kk


前天打metabit的比賽,前後有一些小事

skyh打了第一輪,但是寄了,於是也要打第二輪

(每輪前25名能獲得資格。要去掉非在讀大學生。第一輪獲得名額的人不佔第二輪名額)

我也打算打第二輪。但當時因爲疫情原因在猶豫要不要去

skyh當天有事,說我不去就幫他打,但我尋思着沒啥事就去,於是就自己打自己的(skyh似乎另找了別人)

然後開考之前cbx,哦不,xbc跑出來

 

然後就開打了

我5分鐘A題,7分鐘B題。這時以17的罰時排在第4

然後就變成菜狗了,C題不會

看排行榜,沒人過

又想了想C題,不會

看排行榜,沒人過

開始看並思考D題,不會

看排行榜,沒人過

開始看並思考E題,不會

看排行榜,沒人過

這時候cbx,啊,xbc冒出來

 這時間點也太奇怪了,第24分鐘問A題

後來發現他是先WA了一發A然後去搞B,B在24分鐘過的

然後A在25分鐘過的

我覺得C題沒什麼希望。於是開始認真地思考D題

想了半天終於有思路了,於是開寫

開寫之前瞥了一眼榜,C題突然過了一萬個人,D題有零星一兩個

然後在49分鐘的時候把D過掉了。中間磕磕絆絆的

調了好久。最後是因爲做浮點數除法的時候倆參數都是int給我取整了

暗罵自己是沙白

 

 這時候過了D題但我的排名還是已經掉到兩位數了

然後開始冥思苦想C,但是一直差點思路

 然後我就開始寫記搜

 在比賽過了大半的時候我調出來了暴力過了樣例

 ?最開始說好的頹題解上升的有點快

(主要是因爲打比賽的網站和我們學校程設相關課程網站一直。有查重,怕被ban)

(我們學校用,所以我們是實名。在一堆亂七八糟的現起ID裏看起來就像傻憨憨)

 

 記一下這句話,後面要考(

經典/st甩頭。看着這一堆磨磨唧唧的變量就知道爲啥他想要代碼了

然後突然他茅塞頓開

回收封面(

後來我把代碼局部重構了,把記搜改成了滾動數組dp

(什麼垃圾網站內存就給128M…滾動我還調了半天)

然後終於過了。開始思考E

 當時我正在認真思考問題,沒有意識到事情的嚴重性

 

 

 

這就要上AC代碼了

然而主要問題是,我在VSCode上直接把C題的代碼覆蓋了去寫E了

我又懶得去翻網站,我心想就一個記憶化改滾動數組自己寫也沒啥問題

也不知道他那裏到底發生了啥,但看時間似乎還差不多,我就先跑去E了

然後就開始使勁搞E題。有了個大體思路

交上去嘗試了一下,爆了一發

在離比賽結束還有不到十分鐘的時候有了個百分百對的思路

但是來不及寫了,於是擺爛了

閒來無事翻翻排行榜,自己在14名

xbc掉的有點多,而且有個離譜的事情

C題他狂暴爆10發沒整出來。我也不知道到底是啥問題

反正xbc大神賽後就不鳥我了,555

skyh大神,或者這場比賽裏叫做e大神,找的代打似乎不夠大神,打到了34名

這只是初步去重。由於非在校本科生的存在,第一輪的第29名也收到邀請了

所以去重31還是很有戲的

而且應該像我這樣不去的人也有,那往前擠擠就進去了

(不會只有我是沙白吧)

反正他們就在北京上學,離北京近

秦皇島人在杭州上學,到哪都是卑微

怎麼省選寄了一次高考寄了一次後續破事沒完沒了的啊


今天下午(考科三之前)metabit的人給我打電話,問我的意願,我說應該想去

他說讓我填問卷。截至時間是8/10 23:59

嗯,然後考完了科三,在截止日期的時間點,我在寫這篇博客

事實上還想報的,但是時間一耽誤的話,如果下次科三還沒過,那麼就要等寒假了

我現在對我的水平可是充分不自信

今天都不行。那這10天駕校不組織練車,之後再考估計也很可能不行

更甭提再多等一個學期寒假再考了。忘乾淨了都

不如在家背背科四的東西。希望這個假期能把本搞下來…唉,真費勁

哈哈,就假裝是我忘了回覆問卷吧

北京是一個會讓我留下遺憾的地方,過去是,現在是,將來也會是


所以,現在,前天的意義,就只是單純的打了一場沒有任何用的個人賽

爲了留下點什麼,來寫個題解吧

 

無聊的A題

 

 無聊的B題

 

沒什麼意思的C題

 

無聊的D題

 

一般般的E題

 

題解區:

A.按下注排序,拿個變量維護當前排名最高的是誰,模擬,沒了

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,p[100005],w[100005];
 4 long long ans[100005];
 5 struct pe{
 6     int p,w,id;
 7     friend bool operator<(pe x,pe y){return x.w>y.w;}
 8 }P[100005];
 9 int main(){
10     cin>>n;
11     for(int i=1;i<=n;++i) scanf("%d",&P[i].p),P[i].id=i;
12     for(int i=1;i<=n;++i) scanf("%d",&P[i].w);
13     sort(P+1,P+1+n);
14     int mx=1;
15     for(int i=1;i<=n;++i){
16         if(P[i].p<P[mx].p)mx=i;
17         ans[P[mx].id]+=i*1ll*(P[i].w-P[i+1].w);
18     }
19     for(int i=1;i<=n;++i) printf("%lld ",ans[i]);
20 }
View Code

B 猜的結論,不會證,但感覺很對。應該是先造出一個全能的,然後讓這一個全能的擴展到全部

  造出一個全能的需要的步數是 最小的出現所有技能的子區間長度-1, 擴展到全部是n-1

  求這個子區間就維護一個set裏存着每種能力上次出現的下標,每次用當前枚舉的右端點減去set裏的最小值就完事了

  不過這個結論有誰能證嗎?

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,m,l[300005],ans;
 4 multiset<int>s;
 5 int main(){
 6     cin>>n>>m;
 7     ans=n;
 8     for(int i=1;i<=m;++i) s.insert(l[i]=-n);
 9     for(int i=1,x;i<=n;++i){
10         scanf("%d",&x);
11         s.erase(s.find(l[x]));
12         s.insert(l[x]=i);
13         ans=min(ans,i-*s.begin());
14     }
15     cout<<ans+n-1;
16 }
View Code

C 倒着dp。dp[d][T][0/1][0/1]表示第d天還剩T塊錢,且當前A B分別有沒有付過打車錢,這種情況下最大期望滿意度

  轉移方式可以參考我給cbx的暴力代碼。把記搜改成滾動數組優化就行了

  這個題爲什麼想了那麼久啊?爲什麼啊?最開始甚至沒想到後兩維狀態,這也太菜了吧

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,T,a[2333],b[2333],c[2333],d[2333],e[2333],p[2333],nw,nx;
 4 long double ans;
 5 double dp[2][10002][4];
 6 inline long double dfs(int T,int s){
 7     //cerr<<nx<<'!'<<' ' <<s<<endl;
 8     if(T<0) return -1e18;
 9     return dp[nx][T][s];
10 }
11 int main(){
12     cin>>n>>T;
13     for(int i=1;i<=n;++i) cin>>a[i]>>b[i]>>c[i]>>d[i]>>e[i]>>p[i];
14     for(int i=n;i;--i){
15         nw=i&1; nx=nw^1; int t=i;
16         memset(dp[nw],0,sizeof dp[nw]);
17         cerr<<i<<endl;
18         for(int j=0;j<=T;++j) for(int s=0;s<4;++s)
19         //cerr<<i<<' '<<j<<' '<<s<<' '<<endl,
20             dp[nw][j][s]=max(
21             a[t]+dfs(j-b[t],s|1)*p[t]/100+dfs(j-b[t],s|2)*(100-p[t])/100,
22             c[t]+(s==3?dfs(j-d[t]-e[t],0):dfs(j-d[t],s|1)*p[t]/100+dfs(j-d[t],s|2)*(100-p[t])/100)
23             );
24     }
25     printf("%.9lf",max(dp[1][T][0],-1.));
26 }
View Code

D 普通的期望題。利用期望的線性性,對於每一對同色的,消除它們的期望得分是(它們的距離+1)/2。

  每一對乘上它們這對存在於最終方案的概率即可(概率是$\frac{1}{k-1}$)

  因爲隨機選擇,所以介於這一對之間的每個球都有一半的概率在此前被消掉,一半的概率沒消掉。

  那麼只要把距離改爲 右側的下標 - 左側的下標,然後對每一個球分別統計他作爲左側和右側的次數,就做完了

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,m;long double ans;
 4 vector<int>v[100005];
 5 int main(){
 6     cin>>n>>m;
 7     for(int i=1,x;i<=n;++i) scanf("%d",&x),v[x].push_back(i);
 8     for(int i=1;i<=m;++i){
 9         int s=v[i].size();
10         long double p=1.L/(s-1);
11         for(int j=0;j<s;++j) ans+=p*(1-s+j+j)*v[i][j];//,cout<<1-s+j+j<<' '<<v[i][j]<<endl;
12         //cout<<ans<<endl;
13     }
14     printf("%.9Lf",(n/2+ans)/2);
15 }
View Code

E 考慮你是怎麼求所有子段的最大子段和的。簡單dp,srr[l][r]=max(srr[l][r-1],srr[l+1][r],sum[l...r])

  也就是如果說srr被sum更新了,那麼sum就等於srr,否則sum小於等於srr

  sum拆成前綴和形式變成$S_r-S_{l-1}$,那麼就是經典的差分約束,有若干個$S_a-S_b \leq srr$或者 $S_a-S_b = srr$

  小於等於就建單向邊,否則雙向。最後輸出一組方案就完了。

  代碼並沒有時間寫,所以或許正確性可能也有問題,歡迎指正。 


 我好菜啊我好菜啊我好菜啊

學車和競賽樣樣不精通

還是擺爛睡大覺吧

(怎麼感覺總是這麼結尾的,表達不出今天的壞心情)

算了,表達出來也不見得是什麼好事

我都說不藏了你還看這個幹啥

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章