ZZUACM Month Round 2回顧與總結

  昨天進行了第二次月賽,緊張刺激,暴露了我的無數問題,八道題第七名的成績也算是對我能力的體現了。

  (要不是能看代碼我就不寫總結了)


  考試前和柴嘉浩楊宇航等人聊了聊天,當時就發現腿有點軟,有點激動了。電腦解鎖之後bits/stdc++.h打錯了兩三遍。環境倒是沒啥好調的,寫一個python的A+B了事。當時還開了一個1.cpp和一個1.in,後來才變成f.cpp,j.cpp這樣,不太應該。

  拿到題之後一眼看到了A,馬上想到了倆互質的話應該輸出m+n-1,不互質的話可以先提取相同的因數到ans裏,再輸出ans*(m+n-1)這樣搞一搞。寫完一個暴力之後發現最壞能跑滿1e9,於是改成根號x交了,WA了。

    int x,y,ans=1,maxx=sqrt(x);
    cin>>x>>y;
    for(int i=2;i<=maxx;i++)
    {
        while(x%i==0&&y%i==0)
        {
            x=x/i;
            y=y/i;
            ans=ans*i;
        }
    } 
    cout<<ans*(x+y-1);
A1

  顯然這樣很錯。如果我當時靜下心來想一想那個因子們的乘積他不就是gcd,就1A了,但是很可惜,我當時WA了之後想到的並不是重新思考,而是把之前寫的暴力拿出來,改成函數,開始跑暴力。改成了最後判斷一下n是不是m的因子,然後還是WA了,當時就慌起來了因爲沒想到有啥問題。

  十四分鐘的時候笑凡哥已經A了倆題了。我跟榜開始寫C,5分鐘過了稍微安心了點。

  然後看E,先寫了個

ans=a*b*c;
ans-=2*((a-2)*(b-2)+(b-2)*(c-2)+(a-2)*(c-2));
ans-=(a-2)*4+(b-2)*4+(c-2)*4;
ans-=8;

  直接交了。。然後想到了111的情況,剛開始寫if就覺得不太對勁,一想,這不就是(a-2)*(b-2)*(c-2)麼,所以有一個小於等於2的時候就輸出0.改了改也過了。

  回去看A,把詢問的幾個循環扔到函數裏並和暴力跑了跑對拍,這才往上交。所以到最後也沒想起來gcd。

  E題繼續往下看就看到了F。我一看這不是sb題麼,我直接bi/ai爲關鍵字sort一遍挨個取就完事了。於是寫了一發帶着freopen交了上去,RE,改了之後WA,這個時候已經在撓頭了,覺得題意是不是有問題啊輸出了一波sumb/gc<<'/'<<suma/gc又WA了,發現自己沒寫long long於是改回去suma/sumb並改long long並且又WA了。懷疑了一會人生就走了,看看大夥能不能過吧。

  F題往下又看到了G。顯然,c修改操作不能跑滿,大膽猜測有循環節,於是先不記複雜度,嗯寫了一下f(x)這個函數,輸出每個數的100次後的結果沒找到啥規律。於是我把每個數做100次後的數字標記一下,輸出這些數字發現只剩十個數。再輸出這十個數的f()發現確實有三個環。那就好寫起來了,拿到這個數開始往後循環,如果踏入到了三個環裏就可以直接算答案了。當然如果到c次了也沒進去那就停止循環並且輸出。WA了一發之後讀了一遍題發現是前導0的問題,改了之後就A了。

  看一眼榜挺難過的,大夥都在我上面。跟榜楊宇航發現了H這道水題,簡單到或許拓撲也算不上,棧搞一搞就完事,然後又帶着freopen上了,又WA一發。

  l題實際上是經典老題了,我上去先把ai都減去k,然後不太會了。於是上了個廁所回來推式子。考慮處理處ai減掉k之後的數字的前綴和ci,統計以i爲右端點的區間數量就是在統計cj<=ci的數量。離散化+樹狀數組搞定。這裏感謝前天湘潭重現賽我寫掉的一道離散化+樹狀數組+莫隊,這裏再次用到了離散化+樹狀數組。

  然後手上就剩下來了六道題。我清楚的記得當時同時開這五道題的情況(因爲我猜D題是防AK的)。演草紙上這樣寫到:

B AOE想不到哇 
F 估計是數據有問題
I 區間覆蓋
J bi+bi+1<=x想不到哇
K 博弈

  B題寫了用堆模擬卻發現最壞被卡到1e9,但是確實想不到咋做;F紅四了又換了兩種思路還是錯,想到了揹包但是感覺最壞要到n*bi*n;I題猜了個結論錯了就走了;J題我看大夥全是1A,有點難受,也是確實想不到,看一眼楊宇航發現他也一樣,笑了出來。那就開始寫K的暴力猜結論吧。

  博弈論,我選擇map存狀態。埋頭寫了20多分鐘發現這個長度輸出的先手必勝的情況全是首尾相同的字符串。於是大膽猜測只與首尾和長度有關,判斷了下確實是個這,於是1A。

    cin>>s;
    if(s[0]==s[s.length()-1])
        if(s.length()%2==1)
            cout<<"Second";
        else
            cout<<"First";
    else
        if(s.length()%2==1)
            cout<<"First";
        else
            cout<<"Second";
K

  這個時候已經封榜了,手上還有BFIJ,其中J題過的人最多,又寫了15分鐘F的揹包做法又WA了,感覺揹包和我的貪心本質上一樣啊估計是小數據WA了。實際上回過頭來看揹包是不可能WA的只會T,但是我沒想那麼多開始想J了。之前寫的是讓奇數位上的數減但是被我自己造的數據卡掉了。後來開始瞎搞了竟然過去了,是個貪心。。。然後就沒啥心思寫題了,I題又猜了幾發都錯了就這樣結束了。

  回過頭來看這次比賽其實很簡單啊,A題m+n-gcd(m,n),B題二分答案很好check,C題模擬,D題不會,E題(a-2)*(b-2)*(c-2),F題把揹包優化一下就好了,G題找規律,H題簡單拓撲,I題沒想懂題意,J題直接貪心,K題dfs暴力猜結論,L經典老題。除了B題二分沒想出來,犯的sb錯誤導致罰時有點多之外也沒啥遺憾了。

  下次一定能做得更好。

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