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:调程序调得有点急躁总结
办法:冷静思考问题出在哪里。思考
很像双指针计数题,咱们就双指针吧。
记录 [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随手切的男人啊,柯西考场降智)
卢卡斯 Lucas定理待补充...
看不懂的题目待补充...