Comet OJ - 模拟赛 #2 Day1 比赛总结

比赛情况

40 + 60 + 0 = 100pts

哎,T1做错了,没有对拍。如果发现错误 \(=>\) 改正 \(=>\) 40->100pts,160pts \(=>\) 就是rk11,12了(没有那么多如果拉)。T3 看不懂题目,我菜出天际。。。然而dalao们还是轻松AK了。

比赛总结

这场比赛还是总体偏水,比较套路。但是我的能力应该是在160pts。

  • T1 :T1比CSPD1T1可能要难一点,有套路的。考场上看到这题我就马上联想到了双指针和dp,没有太看dp的正确性就写了dp,其实这个dp是错误的。

  • T2 :T2就是一个套路题。60pts的做法我调了好一会,100pts的做法是卢卡斯定理,没得说。

  • T3 :有许些dalao切了T3,T3应该比CSPD1T3简单得多,还好没有去钻T3,因为我连题目都看不懂。

问题1:简单的题目做错了。

办法:做题时脑袋要清醒,冷静分析做法,努力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 小猪佩奇和仙人掌

看不懂的题目待补充...

全部评论

相关推荐

Hello_WordN:咱就是说,除了生命其他都是小事,希望面试官平安,希望各位平时也多注意安全
点赞 评论 收藏
分享
牛客279957775号:铁暗恋
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务