码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 「蓝桥·算法双周赛」第一场公开赛【待补题填坑】


    三带一【算法赛】 - 蓝桥云课 (lanqiao.cn)

    给定四个字符,判断是否其中有三个相同,另一个与他们不同

    1. #include
    2. void solve()
    3. {
    4. std::string s;
    5. std::cin>>s;
    6. char a=s[0],b=s[1],c=s[2],d=s[3];
    7. if(a==b&&a==c&&a!=d) std::cout<<"Yes"<<'\n';
    8. else if(a==b&&a==d&&a!=c) std::cout<<"Yes"<<'\n';
    9. else if(a==d&&a==c&&a!=b) std::cout<<"Yes"<<'\n';
    10. else if(d==b&&d==c&&a!=d) std::cout<<"Yes"<<'\n';
    11. else std::cout<<"No"<<'\n';
    12. }
    13. signed main()
    14. {
    15. int t;
    16. std::cin>>t;
    17. while(t--)
    18. {
    19. solve();
    20. }
    21. return 0;
    22. }

     数树数【算法赛】 - 蓝桥云课 (lanqiao.cn)

     二叉树性质问题,不了解二叉树也完全可以做。

    要注意的是每次都从第一行的第一个点开始走,给一个字符串按照它走,输出最后的结果就行。

    往左走坐标就变成了2*pos-1,往右就变成了2*pos

    画个树理解一下就好了。

    1. #include
    2. signed main()
    3. {
    4. int n,q;
    5. std::cin>>n>>q;
    6. int pos=1;
    7. while(q--)
    8. {
    9. pos=1;
    10. std::string s;
    11. std::cin>>s;
    12. int i=0;
    13. while(s[i])
    14. {
    15. if(s[i]=='L')
    16. {
    17. pos=2*pos-1;
    18. }else if(s[i]=='R'){
    19. pos*=2;
    20. }
    21. i++;
    22. }
    23. std::cout<'\n';
    24. }
    25. return 0;
    26. }

     分组【算法赛】 - 蓝桥云课 (lanqiao.cn)

    这题要求最大的极差最小。【二分答案题目整理】—— 最大化最小值 + 最大值最小化(上)_现在小红有一只木桶由 n 块木板组成,第 i 块木板的长度为 ai 。 现在你有一种魔法-CSDN博客

    思维固化导致想不出二分,需要专门刷下二分了。。。。。

    二分极差,然后判断如果以该极差来分组,所分的组数能否小于k(如果小于k,那么k肯定能满足。因为一个数可以单独成一组,即极差为0),如果能就减小极差继续试探,否则增大极差。

    1. #include
    2. const int N=1e5+10;
    3. int a[N];
    4. int n,k;
    5. bool check(int x)
    6. {
    7. int last=1,cnt=1;
    8. for(int i=1;i<=n;i++)
    9. {
    10. if(a[i]-a[last]>x)//如果当前这个不行就分组
    11. {
    12. last=i;
    13. cnt++;
    14. }
    15. }
    16. return cnt<=k;
    17. }
    18. signed main()
    19. {
    20. std::cin>>n>>k;
    21. for(int i=1;i<=n;i++) std::cin>>a[i];
    22. std::sort(a+1,a+1+n);
    23. int l=0,r=2e9,res=0;//枚举极差
    24. while(l<=r)
    25. {
    26. int mid=l+r>>1;
    27. if(check(mid))
    28. {
    29. res=mid;
    30. r=mid-1;
    31. }else l=mid+1;
    32. }
    33. std::cout<
    34. return 0;
    35. }

    健身【算法赛】 - 蓝桥云课 (lanqiao.cn)

    十年OI一场空,不开longlong见祖宗。

    这道题是一个完全背包问题,需要注意的是si范围是1e9,不开longlong会死。

    首先dp预处理出 对应连续天数 能收获的最大分数。

    然后对连续天数进行计算,每算出一个连续天数就加上对应的分数。

    1. #include
    2. const int N=2e5+10;
    3. #define int long long
    4. int n,m,q;
    5. int cantuse[N],k[N],s[N];
    6. struct st{
    7. int k,s;
    8. }a[N];
    9. int res,cnt;
    10. int f[N];
    11. #define int long long
    12. void solve()//有i天怎么用最大化
    13. {
    14. for(int i=1;i<=m;i++)//对物品遍历
    15. {
    16. for(int j=a[i].k;j<=n;j++)//对容积遍历
    17. {
    18. f[j]=std::max(f[j],f[j-a[i].k]+a[i].s);
    19. }
    20. }
    21. }
    22. signed main()
    23. {
    24. std::cin>>n>>m>>q;
    25. for(int i=1;i<=q;i++)
    26. {
    27. int d;
    28. std::cin>>d;
    29. cantuse[d]=1;
    30. }
    31. for(int i=1;i<=m;i++)
    32. {
    33. std::cin>>a[i].k>>a[i].s;
    34. a[i].k=pow(2,a[i].k);
    35. }
    36. solve();
    37. f[0]=0;
    38. for(int i=1;i<=n;i++)
    39. {
    40. if(!cantuse[i]) cnt++;
    41. else{
    42. res+=f[cnt];
    43. cnt=0;
    44. }
    45. }
    46. if(cnt) res+=f[cnt];
    47. std::cout<
    48. return 0;
    49. }

     契合匹配【算法赛】 - 蓝桥云课 (lanqiao.cn)

    这题注意两个点,提前把一个字符串反转(大写改小写,小写改大写),剩下就只用判断是否子串就好了。

    同时这题涉及到顺逆时针旋转的问题,我们只要让a=a+a,就能满足a顺逆时针旋转的情况。

    1. #include
    2. const int N = 1e6 + 10;
    3. int n, ne[N];
    4. std::string a, b;
    5. void kmp()
    6. {
    7. for(int i=2,j=0;i<=n;i++)
    8. {
    9. while (j&&b[i]!=b[j+1]) j=ne[j];
    10. if(b[i]==b[j+1]) j++;
    11. ne[i]=j;
    12. }
    13. for (int i=1,j=0;i<=2*n;i++)
    14. {
    15. while(j&&a[i]!=b[j+1]) j=ne[j];
    16. if (a[i]==b[j+1]) j++;
    17. if(j==n)
    18. {
    19. std::cout<<"Yes\n"<min((i-n),(2*n-i));
    20. return ;
    21. }
    22. }
    23. std::cout<<"No";
    24. }
    25. void solve()
    26. {
    27. std::cin >> n >> a >> b;
    28. a=" "+a+a;
    29. b=" "+b;
    30. for(int i=1; i <=n; i++)
    31. {
    32. if (isupper(b[i])) b[i] = tolower(b[i]);
    33. else b[i] = toupper(b[i]);
    34. }
    35. kmp();
    36. }
    37. signed main()
    38. {
    39. std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);
    40. solve();
    41. return 0;
    42. }

    奇怪的线段【算法赛】 - 蓝桥云课 (lanqiao.cn)

    这题似乎要用树状数组,博主还没学过,留个坑。

  • 相关阅读:
    今天给大家介绍一篇基于javaWeb的汽车订票系统的设计与实现
    Google Earth Engine 教程—— 数据的相关分析时序图展示
    MyBatis 缓存
    【李沐深度学习笔记】矩阵计算(5)
    leetcode算法每天一题026:删除有序数组中的重复项
    Spring中@Bean标注的方法是如何创建对象呢?
    移动机器人建模两轮驱动与四轮驱动
    Java 解析线程的几种状态详解
    计算机操作系统 (第四版 汤小丹)(持续学习中)
    企业是如何搭建帮助中心的?
  • 原文地址:https://blog.csdn.net/m0_74183164/article/details/133830330
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号