码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • AcWing第80场周赛总结


    第一题没什么好讲的,直接秒了,下次尽量要在5min内写完。
    T2:寻找数字
    第二题sb了,一直在想贪心的办法,但是考虑到这个比赛的难度 ,其实最原始的dfs才是正解。dfs的妙处在于:省去了对于各类可能不合法的情况的分类讨论,直接通过一个判断全部筛掉,而且可以保证答案的最小性,因为是dfs序。这题的时间复杂度理论上是O(n*lgn)的,但是实际上跑得飞快,只用了24ms就过了。所以就可以写出如下代码:

    #include
    #include
    using namespace std;
    const int N=35;
    typedef long long ll;
    int n,m;
    ll ans=1e18;
    int a[N];
    void dfs(int u,int len,int s4,int s7){
        if(s4>(len+1)/2 || s7>(len+1)/2) return;
        if(u==len){
            ll res=0;
            for(int i=len;i>=1;i--){
                res=res*10+(ll)a[i];
            }
            if(res>=(ll)n) ans=min(ans,res); 
            return;
        }
        a[u+1]=4;
        dfs(u+1,len,s4+1,s7);
        a[u+1]=7;
        dfs(u+1,len,s4,s7+1);
        a[u+1]=0;
    }
    int main(){
        cin>>n;
        m=(int)(log(n)/log(10))+1;
        if(m&1) dfs(0,m+1,0,0);
        else dfs(0,m,0,0);
        if(ans==1e18){
            dfs(0,m+2,0,0);
        }
        cout<<ans<<endl;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    T3:摆放棋子
    这题显然是一个dp,但是我用自己的神奇推法并没有办法AC,所以需要借鉴一下别人的优美写法:设fi,j,0/1表示填了前i个位置,且一共填了j个白子,最后一个子为白子(0)或黑子(1)。那么这种写法实际上是一种线性DP的写法,并且巧妙地找到了最后一个不同点:最后一个子的黑白。那么转移就非常简单了:
    fi,j,0= ∑ k = 1 k 2   f i − k , j − k , 1 \sum_{k=1}^{k2}\ f_{i-k,j-k,1} ∑k=1k2​ fi−k,j−k,1​
    fi,j,1= ∑ k = 1 k 1   f i − k , j , 0 \sum_{k=1}^{k1}\ f_{i-k,j,0} ∑k=1k1​ fi−k,j,0​
    边界:f0,0,0=f0,0,1=1
    代码较易,不予展示。
    P.S.:y总的代码感觉无法透彻地理解,所以还是采用了nickxiao大佬的解法。

    赛后总结

    时间紧迫,不能迟到,然后不能思维定式,可以通过一些较为“朴素”的手法来简化问题,最后就是要多积累一些题目。

  • 相关阅读:
    网上有什么可以做的副业,或者是挣钱的方法?
    SQL note2:DIsks and Files
    ensp命令练习及交换机 和个路由器的基本命令
    okcc哪些企业需要托管型呼叫中心系统?
    【LINUX】PS1 alias
    二十一、vite中的glob-import批量导入
    朝夕光年「红砖」搭建平台架构设计和应用落地
    MFC使用MScomm32.ocx控件实现串口通信
    Java后端入职第四天,就被要求代码回退(Git回退实战)
    用shell批量改变打错标签的名字(打标签是一生之敌)
  • 原文地址:https://blog.csdn.net/m0_55341679/article/details/128194329
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号