首页 > 其他分享 >识海社区打卡-2

识海社区打卡-2

时间:2024-11-10 22:21:38浏览次数:1  
标签:std 社区 前缀 识海 int ++ 打卡 dp

今天打卡一道题,白天太忙了,没时间打卡树状数组,昨天就睡了三小时就去软考了差点没猝死我,回来路上还见识到了哈尔滨公交车的险恶导致下午三点才到校,花了一个小时吃饭洗漱然后就睡觉了,7点起到工位上,看了会昨天cf的题解摆烂了一会就到十点了,得抓紧更新打卡然后接着cf,明天还有早八悲,感觉已经在猝死的边缘反复横跳了。

题目链接:Problem - C - Codeforces

这题昨晚花了我两小时也没解出来,第一眼就是dp类型,但我确实当时没想到怎么dp就想了别的方法。

首先理解下题目的意思,就是给定一个数组a,然后一个返回值ans = 0,当数组a中的数a[i] > ans,ans++,else ans--;然后可以选择一个区间进行跳过,使得最后的返回值最大。

我当时的想法是这有两种情况,一种是前缀最大就是最大,到了某个位置后ans大于了后面的所有数字,那么返回这个最大值就好了,还有一种情况就是跳过中间的某一段然后答案就是前面的最大再加上最后的一段。

想法有了如何实现,我是先建立一个找到最大的前缀x,然后记录最大前缀的位置,往后的数全减去最大前缀x,然后重复之前找最大前缀的操作就行了。但这个方法在测试样例的时候出了一点问题。

且看样例1,2,1,1,1,3,4

这个样例如果自己算的话就是跳过中间三个1,但是按照上面的实现方法就变成了最大前缀在最后的位置,x = 3,显然不符合答案,所以我新增加了一种机制,就是如果最大前缀的位置并且最大前缀不等于n的时候再往中间找最大的递减区间。很好这回过样例了,但提交后就wa2了

image-20241110221346048

好吧其实到比赛最后我也不知道问题出在哪,在比赛结束后只看到一行

wrong answer 59th numbers differ - expected: '2', found: '3'

经过我的一番操作居然让答案变大了???好吧我确实不知道问题出在哪了,毕竟经过了两个小时的修改代码早已经和屎没有任何区别,这样的代码估计改了多少次依旧是狗屎一坨,还是得用dp了解决。

constexpr int inf = 1E9;

void solve() {
    int n;
    std::cin >> n;
    
    std::vector<int> a(n);
    for (int i = 0; i < n; i++) {
        std::cin >> a[i];
    }
    
    std::array<int, 3> dp {0, -inf, -inf};
    for (int i = 0; i < n; i++) {
        dp[2] = std::max(dp[2], dp[1]);
        dp[1] = std::max(dp[1], dp[0]);
        for (int j = 0; j < 3; j++) {
            if (j == 1) {
                continue;
            }
            int &x = dp[j];
            if (a[i] > x) {
                x++;
            } else if (a[i] < x) {
                x--;
            }
        }
    }
    
    std::cout << std::max(dp[1], dp[2]) << "\n";
}

要想提高自己的代码的水平还是得多看看哥哥的代码,哥哥的动态规划,dp[0]就相当于我的找前缀,dp[1]相当于我的找最大前缀,dp[2]则是找后缀,嗯好像想法和我的差不多,只是我写的太屎了,多多像哥哥学习。

标签:std,社区,前缀,识海,int,++,打卡,dp
From: https://www.cnblogs.com/coloury/p/18538649

相关文章

  • (2024最新毕设合集)基于SpringBoot的梓锦社区疫苗接种服务系统+42529|可做计算机毕业设
    目 录摘要1绪论1.1选题背景与意义1.2开发现状1.3论文结构与章节安排2 梓锦社区疫苗接种服务系统系统分析2.1可行性分析2.1.1技术可行性分析2.1.2 经济可行性分析2.1.3法律可行性分析2.2系统功能分析2.2.1功能性分析2.2.2非功能性分析2.......
  • 树状数组learning Day1识海社区打卡1st
    鉴于上次省赛的惨烈失败教训,狠狠加训,距离下次沈阳站还有两星期,再次感谢东北大学赐予的外卡机会,你知道的,东北大学一直是我的第二户籍所在地。今天到下星期周末为止估计都会持续更新树状数组和线段树相关的笔记。我的刷题顺序大概会按照[灵神提单](LC-Rating&Training)->codefor......
  • 泷羽sec-星光不负a-学习打卡-信息收集(3)
    天眼查https://www.tianyancha.com/(有经济条件开会员)企查查https://www.qcc.com/(可查询相关人电话和公开招标文件信息)谷歌搜索语法1.intext查找网页中含有某个关键字的网站例如:intext:登录后台2.intitle查找标题中含有某个关键词的网页例如:intitle:登录后台3......
  • python+flask计算机毕业设计好骑行打卡园app系统(程序+开题+论文)
    文件加密系统的设计与实现tp835本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容好骑行打卡园app系统毕业设计相关内容说明一、选题背景随着骑行运动在全球范围内的日益流行,与之相关的数字化服务......
  • 化粪池(septic tank)的起源可以追溯到19世纪末20世纪初。当时,随着城市化进程的推进,越来
    化粪池(septictank)的起源可以追溯到19世纪末20世纪初。当时,随着城市化进程的推进,越来越多的城市和乡村开始面临卫生设施和污水处理的问题。为了有效处理家庭和社区的排泄物和污水,出现了化粪池这种简单而有效的排污设施。化粪池的设计原理是通过自然的沉淀和分解作用,分离并处理生......
  • 力扣21 打卡17 设计相邻元素求和服务
    思路:该方案通过构建一个字典,将每个元素值映射到其在二维数组中的坐标位置,以便快速查找。adjacentSum方法根据指定元素的坐标,计算其上下左右相邻元素之和;diagonalSum方法则计算该元素的四个对角线相邻元素之和。每个方法通过判断相邻坐标是否在数组边界内,确保不越界访问。......
  • 第一天打卡,udp协议
    今天学了udp协议基础,udp协议是一种无连接的网络协议,提供一种简单的方式来输送数据。发送:要用到的方法封装在InetAddress类中,其中DatagramSocket对象ds相当于快递员身份,不传递参数值的话会随机生成端口,进行输送快递(数据),快递的身份由DatagrampPacket对象充当,把东西打包。其中的......
  • 基于nodejs+vue闸口社区管理系统[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于社区管理系统的研究,现有研究主要以大型综合社区或特定功能社区(如养老社区、智慧社区等)为主,专门针对闸口社区这种具有特定地理或功能属性的社区管理......
  • 居然都到 7.x版本了!!!雷池 WAF 社区版 7.x 的体验记录
    雷池WAF简介雷池WAF,英文名“SafeLine”,由长亭科技出品的一款Web应用防火墙,可以保护Web服务不受黑客攻击,早年就以”智能语义分析技术“闻名于安全行业。雷池社区版是长亭基于原有技术打造的一款开源WAF,主打简单易用,我猜的不错的话长亭应该是想借这种产品形态来占领中......
  • 力扣21 打卡16 判断矩形的两个角落是否可达
    思路:首先,检查矩形的起点和终点是否在任何一个圆的范围内,如果是则不存在合法路径。接着,判断每个圆是否与矩形的左上角边界或右下角边界相交。对于与左上边界相交的圆,使用深度优先搜索(DFS),查找是否存在一组相连的圆,最终能连接到右下边界。若找到这样的路径,则矩形被封锁,返回Fa......