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错误导致罚时有点多之外也没啥遗憾了。

  下次一定能做得更好。

posted @ 2021-05-31 21:57  zzuqy  阅读(147)  评论(1编辑  收藏  举报