文章目录

  • 1. 比赛结果
  • 2. 题目
    • 1. 树木规划
    • 2. 正三角形拼接
    • 3. 大楼间穿梭
    • 4. 对称前后缀

1. 比赛结果

通过了 3 题,第245名,进入复赛了,收获 T恤 一件,哈哈。

2. 题目

1. 树木规划

题目链接

描述

在一条直的马路上,有 n 棵树,每棵树有一个坐标,代表它们距离马路起点的距离。 如果每相邻的两棵树之间的间隔不小于 d,那么我们认为这些树是美观的。 请计算出最少移除多少棵树,可以让这些树变得美观。

树木的棵树为 n,1 <= n <= 10^5。 树木的坐标用 trees 表示,0 <= trees[i] <= 10^9。 最小美观间隔为 d,1 <= d <= 10^9。 保证输入的坐标是排好序的,且两两不相同。

说明

样例中,将位置 2 和 6 的树木移走,剩下 [1, 3, 5] ,它们是美观的。

示例
输入:
[1,2,3,5,6]
2
输出:
2

解题:

  • 直接遍历,不满足的移除
class Solution {public:/*** @param trees: the positions of trees.* @param d: the minimum beautiful interval.* @return: the minimum number of trees to remove to make trees beautiful.*/int treePlanning(vector<int> &trees, int d) {// write your code here.int prev = trees[0], s = 0;for(int i = 1; i < trees.size(); ++i){if(trees[i]-prev < d)//不满足{s++;//移除}else{prev = trees[i];}}return s;}
};

2. 正三角形拼接

题目链接

描述

给出 n 根木棍,每次切割可以将1根木棍切成 2 段。请计算出最少切割几次,可以从所有木棍中选出 3 根,组成一个三角形。

一开始的木棍根数为 n,3 ≤ n ≤ 1000。所有木棍的长度为一个整型数组 lengths,1 < length_i ≤ 10^9。
切割必须要将木棍分成 2 根整数长度的木棍,而且总长度要和原木棍相等。

说明

可以从长为7的木棍中,切出2根长为3的木棍,那么木棍的长度应该为[2,3,1,3,3,5],可以拼出边长为3的正三角形。

示例
输入:
[2,3,7,5]
输出:
2

解题:

class Solution {public:/*** @param lengths: the lengths of sticks at the beginning.* @return: return the minimum number of cuts.*/int makeEquilateralTriangle(vector<int> &lengths) {// write your code here.map<int, int> m;int cut = 2;//最多切两次for(int i = 0; i < lengths.size(); i++) m[lengths[i]]++;//长度计数for(auto& mi : m){if(mi.second == 2)//有2段了{if(m.lower_bound(mi.first+1) != m.end())cut = min(cut, 1);//有更长的,切1次}else if(mi.second >= 3)//有3段了,不用切return 0;if(mi.first%2==0 && m.count(mi.first/2))cut = min(cut, 1);//如果能被平均切开,且有1段一样的,切1次就可以}return cut;}
};

3. 大楼间穿梭

题目链接

描述

蜘蛛侠在大楼间穿梭。大楼的高度可以看作是一个从左到右排列的数组。
现在蜘蛛侠站在第一栋大楼上,他想跳到最后一栋上。

  • 蜘蛛侠的视野为 k,他可以花费 x 点体力,用蛛丝移动到右侧k幢建筑中第一栋比当前位置高的大楼(应该是 高或者相同高度,题目有问题)。
  • 或者蜘蛛侠可以花费 y 点体力,跳跃到右侧接下来两栋大楼其中一栋。

请计算蜘蛛侠最少花费多少体力,到达最后一栋上。

大楼的高度为数组 heights,一共有 n 栋大楼,2 ≤ n ≤ 10^5,1 <= heights_i ≤ 10^9.蜘蛛侠的视野为 k,1 ≤ k ≤ n。两种行动的体力花费满足 1 ≤ x,y ≤ 10^9

说明
样例中,先花费6点体力跳到第三栋建筑,再花费10点到达最后一栋。

示例
输入:
heights=[1,5,4,3,3,5]
k=3
x=10
y=6
输出:
16

解题:

  • 单调栈算出右侧高度 >= 当前的 第一个位置(逆序遍历)
  • 然后简单的动态规划即可
class Solution {public:/*** @param heights: the heights of buildings.* @param k: the vision.* @param x: the energy to spend of the first action.* @param y: the energy to spend of the second action.* @return: the minimal energy to spend.*/long long shuttleInBuildings(vector<int> &heights, int k, int x, int y) {// write your code here.int n = heights.size(), i, j, K;stack<int> s;vector<int> rightTall(n, -1);//右侧高或者相等的第一个位置for(int i = n-1; i >= 0; i--) //单调栈{while(!s.empty() && heights[s.top()] < heights[i])//右侧比我小的,没有用s.pop();if(!s.empty() && s.top()-i <= k)//有大于等于我的,且距离在 k 以内rightTall[i] = s.top();//记录下来s.push(i);}vector<long long> dp(n, LONG_LONG_MAX);dp[0] = 0;for(int i = 0; i < n; i++) // DP{if(dp[i] == LONG_LONG_MAX)continue;if(i+1 < n && dp[i+1] > dp[i]+y)//右侧1dp[i+1] = dp[i]+y;if(i+2 < n && dp[i+2] > dp[i]+y)//右侧2dp[i+2] = dp[i]+y;if(rightTall[i] != -1 && dp[rightTall[i]] > dp[i]+x)dp[rightTall[i]] = dp[i]+x;//直接跳到 k 以内的 第一个 >= 我的位置}return dp[n-1];}
};

4. 对称前后缀

题目链接

描述

给定一个字符串 s。我们令一个字符串的权值为一个字符串的最长对称前后缀长度。
请求出 s 的所有子串权值的总和
例如,”abcxyzcba” 的最长对称前后缀的长度为3,因为“abc”“cba”对称。
字符串的长度为 n,1 ≤ n ≤ 3*10^3。字符串均由小写英文字符组成。

说明

样例中,单个字符的子串的权值为1,它们的和为 7。
另外的权值为:
"bacb"->1
"bacbdab"->2
"bdab"->1
"acbda'->1

所以权值和为12。

示例
输入:
"bacbdab
输出:
12

解题:

  • 区间DP
class Solution {public:/*** @param s: a string.* @return: return the values of all the intervals.*/long long suffixQuery(string &s) {// write your code herelong long n = s.size(), ans = n;//区间DP,dp[i][j] 表示区间内的 子串的最大权值vector<vector<int>> dp(n, vector<int>(n, 0));for(int i = 0; i < n; i++)dp[i][i] = 1;for(int len = 1, i; len < n; len++){for(i = 0; i+len < n; i++){if(s[i] == s[i+len])//子串首尾相同{int length = len-1;//除去首尾 里面的子串[i+1, i+len-1]的长度if(dp[i+1][i+len-1] == length)// 里面正反序都相同dp[i][i+len] = dp[i+1][i+len-1]+2;//把两个端点都可以加上elsedp[i][i+len] = dp[i+1][i+len-1]+1;//只能加上1端}ans += dp[i][i+len];}}return ans;}
};

我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

阿里云 超级码力在线编程大赛初赛 第1场(第245名)相关推荐

  1. 阿里云 超级码力在线编程大赛初赛 第2场 题目4. 小栖的金字塔(超级卡特兰数+除法求模/乘法逆元)

    文章目录 1. 题目 2. 解题 1. 题目 来源:https://tianchi.aliyun.com/oj/15165469968503404/76745683739284070 2. 解题 按道 ...

  2. 阿里云 超级码力在线编程大赛初赛 第4场 题目3. from start to end

    文章目录 1. 题目 2. 解题 1. 题目 样例1: 输入: "abcd" "bcda" 输出: true样例2: 输入: "abcd" ...

  3. 阿里云 超级码力在线编程大赛初赛 第3场 题目2. 房屋染色(DP)

    文章目录 1. 题目 2. 解题 1. 题目 有n个房子在一列直线上,现在Bob需要给房屋染色,共有k种颜色. 每个房屋染不同的颜色费用也不同,Bob希望有一种染色方案使得相邻的房屋颜色不同. 但Bo ...

  4. 阿里云 超级码力在线编程大赛初赛 第3场 题目1. 最大公倍数

    文章目录 1. 题目 2. 解题 1. 题目 来源:https://tianchi.aliyun.com/oj/15179470890799741/85251759933690467 2. 解题 看的 ...

  5. 阿里云 超级码力在线编程大赛初赛 第3场 题目4. 完美字符串

    文章目录 1. 题目 2. 解题 1. 题目 描述 定义若一个字符串的每个字符均为'1',则该字符串称为完美字符串. 给定一个只由'0'和'1'组成的字符串s和一个整数k. 你可以对字符串进行任意次以 ...

  6. 阿里云 超级码力在线编程大赛初赛 第2场 题目3. 五字回文

    文章目录 1. 题目 2. 解题 1. 题目 来源:https://tianchi.aliyun.com/oj/15165469968503404/76745683722506852 2. 解题 注意 ...

  7. 阿里云 超级码力在线编程大赛初赛 第2场 题目1. 三角魔法

    文章目录 1. 题目 2. 解题 1. 题目 题目来源:https://tianchi.aliyun.com/oj/15165469968503404/76745683722506851 2. 解题 ...

  8. 超级码力在线编程大赛初赛第1场-1-树木规划题解

    目录 题目描述 示例 输入 输出 说明 分析 代码 动规 贪心 其他题目 题目描述 在一条直的马路上,有n棵树,每棵树有一个坐标,代表它们距离马路起点的距离. 如果每相邻的两棵树之间的间隔不小于d,那 ...

  9. 超级码力在线编程大赛初赛 第2场 1.三角魔法

    超级码力在线编程大赛初赛 第2场 1.三角魔法 题目链接 描述 小栖必须在一个三角形中才能施展魔法,现在他知道自己的坐标和三个点的坐标,他想知道他能否施展魔法 −1e9≤xi,yi≤1e9-1e9\l ...

最新文章

  1. 洛谷 P4463 [集训队互测 2012] calc(拉格朗日插值优化DP)
  2. 机器学习前沿:Michael Jordan与鬲融、金驰、马腾宇等青年才俊的对话
  3. Some thoughts on my own O/R Mapping or Code Generation tools
  4. Win Form登录机制的实现
  5. poj 1050(DP)
  6. WebDriver API 实例详解(二)
  7. jQuery EasyUI API 中文文档 - ValidateBox验证框
  8. python在input输入数字为何是str_Python基础笔记:input()输入与数据类型转换
  9. Atitit.数据采集器 dataspider
  10. 如何复制百度文库中的内容
  11. 【题目记录】——2021百度之星程序设计大赛-复赛
  12. cad插件制作教程_画图必备的CAD超级工具箱插件下载(含gif教程)
  13. 计算机操作系统教程徐甲同pdf,《操作系统实践教程》.pdf
  14. 计算机配置内存容量怎么调,如何设置电脑虚拟内存,电脑虚拟内存设置多少最合理?...
  15. loadrunner伪装ip访问网页
  16. 贝壳网失败了,有些伤感
  17. GIF录制神器--GIF123
  18. 登录接口已修复梦想贩卖机V2 2.0.4 修复版,附带安装教程。
  19. 【学习求职必备】认真认识一下世界末日那年成立的“华为诺亚方舟实验室”...
  20. infoGAN公式推导(信息最大化生成对抗网络(理论部分))

热门文章

  1. 删除github上的commit历史记录
  2. 大学c语言程序设计大赛,关于举办宁夏大学第二届C语言程序设计大赛的通知
  3. tcp前4字节消息长度_网络基础篇之TCP
  4. python文件夹目录_Python 操作文件、文件夹、目录大全
  5. Caffe源码解析1:Blob
  6. C++代理 Surrogate
  7. 支付宝问题LaunchServices: ERROR: There is no registered handler for URL scheme alipay
  8. 从0-1背包问题学习回溯法、分支界限法、动态规划
  9. jeecms附件标签用法
  10. 最近重构公司消息服务的架构设计