Comet OJ - 模擬賽 #2 Day1 比賽總結

比賽狀況

40 + 60 + 0 = 100ptsc++

哎,T1作錯了,沒有對拍。若是發現錯誤 \(=>\) 改正 \(=>\) 40->100pts,160pts \(=>\) 就是rk11,12了(沒有那麼多若是拉)。T3 看不懂題目,我菜出天際。。。然而dalao們仍是輕鬆AK了。spa

比賽總結

這場比賽仍是整體偏水,比較套路。可是個人能力應該是在160pts。指針

  • T1 :T1比CSPD1T1可能要難一點,有套路的。考場上看到這題我就立刻聯想到了雙指針和dp,沒有太看dp的正確性就寫了dp,其實這個dp是錯誤的。code

  • T2 :T2就是一個套路題。60pts的作法我調了好一會,100pts的作法是盧卡斯定理,沒得說。get

  • T3 :有許些dalao切了T3,T3應該比CSPD1T3簡單得多,還好沒有去鑽T3,由於我連題目都看不懂。it

問題1:簡單的題目作錯了。class

辦法:作題時腦殼要清醒,冷靜分析作法,努力AC D1T1;寫對拍。程序

問題2:調程序調得有點急躁總結

辦法:冷靜思考問題出在哪裏。思考

T1 波浪

很像雙指針計數題,咱們就雙指針吧。

記錄 [l,r] 一個極大區間,這個區間是波浪形的(即< >=交錯出現,相鄰的兩個符號不等),這個區間的波浪子區間數是 (r-l)*(r-l+1)/2 等差數列求和。注意 l>n-1 了就不能走了,由於這個區間至少爲2

Talk is cheap.Show me the code.

#include<bits/stdc++.h>
using namespace std;
inline int read() {
    int x=0,f=1; char ch=getchar();
    while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
    while(ch>='0'&&ch<='9') { x=(x<<3)+(x<<1)+(ch^48); ch=getchar(); }
    return x * f;
}
typedef long long LL;
const int N = 3e6+7;
int n;
int a[N],b[N];
int main()
{
    n = read();
    for(int i=1;i<=n;++i)
        a[i] = read();
    for(int i=1;i<=n-1;++i) b[i] = (a[i]<=a[i+1]);
    int l = 1, r = 0; LL ans = 0;
    while(l<=n-1) {
        r = l+1;
        while(r<=n-1 && b[r-1]!=b[r]) ++r;
        ans += (r-l)*(r-l+1)/2;
        l = r;
    }
    printf("%lld\n",ans);
    return 0;
}
/*
5
1 2 3 2 1

5
*/

(其實我也是T1隨手切的男人啊,柯西考場降智)

T2 小豬佩奇跳格子

盧卡斯 Lucas定理待補充...

T3 小豬佩奇和仙人掌

看不懂的題目待補充...

相關文章
相關標籤/搜索