2019-09-16 17:22:28

总体感受:这次比赛的模版题也太多了吧,两条模版题没有想出来。总的来说,还是自己的刷题量还是严重的不够。

注意点

1)提升刷题量和覆盖率非常重要;

2)在碰到大数处理的时候,还是会出现一些问题,有两个路径吧,一个是使用long来测试一下;二是使用bigInteger。

  • 1191. K-Concatenation Maximum Sum

问题描述:

问题求解:

如果没有repeat操作,本题就是一个典型的dp问题,可以在O(n)内解决。事实上,如果进行了repeat依然可以在O(k * n)解决,但是本题的数据规模非常大,如果直接去计算那么必然会TLE。

这种repeat计算最大子数组和有个经典的解法,叫做 Kadens Algorithm 。使用该算法可以在O(n)的时间复杂度完成求解。

这个算法的核心思路是,如果sum of array > 0,那么中间就可以有k - 2个array,最后前后计算一下prefix和suffix即可;如果sum of array <= 0,那么中间必然不存在一个完整的array,那么最后的解就会出现array和横跨两个array的解中。

当然,本题最恶心的地方不只是这个算法本身,这里还有个大数处理的问题,本题采用的策略是使用long来保存数据,因为long的最长能保存10 ^ 18,本题中不会爆掉。

    public int kConcatenationMaxSum(int[] arr, int k) {
long mod = (long) (1e9 + 7);
long max_num = helper(arr);
if (k == 1) return (int)max_num;
long sum = 0;
for (int num : arr) sum += num;
long suffix = calcsuffix(arr);
long prefix = calcprefix(arr);
if (sum > 0) {
return (int) (Math.max((suffix % mod + prefix % mod + (k - 2) * sum % mod) % mod, max_num));
}
else {
return (int) (Math.max((suffix % mod + prefix % mod) % mod, max_num));
}
} private long helper(int[] nums) {
long mod = (int)(1e9 + 7);
long res = nums[0];
long dp = nums[0];
for (int i = 1; i < nums.length; i++) {
dp = Math.max(nums[i], nums[i] + dp);
res = Math.max(res, dp);
}
return res < 0 ? 0 : res % mod;
} private long calcsuffix(int[] nums) {
long res = Integer.MIN_VALUE;
long curSum = 0;
for (int num : nums) {
curSum += num;
res = Math.max(res, curSum);
}
return res;
} private long calcprefix(int[] nums) {
long res = Integer.MIN_VALUE;
long curSum = 0;
for (int i = nums.length - 1; i >= 0; i--) {
curSum += nums[i];
res = Math.max(res, curSum );
}
return res;
}
  • 1192. Critical Connections in a Network

问题描述:

问题求解:

本题也是一条模版题,是一条经典的求割边的问题,该问题有Tarjan算法,可以在O(n + e)的时间复杂度求解。

Tarjan算法的核心思路是维护两个数组discovery[],low[]。disc[]数组里存放访问节点的时间戳,low[]数组里存放与节点邻接的(不包含父节点)最小时间戳的节点。

每次比较父节点和子节点,如果子节点没有访问到时间戳小的节点,那么这两个节点之间必然有一条割边。

    int timestamp = 1;
public List<List<Integer>> criticalConnections(int n, List<List<Integer>> connections) {
int[] disc = new int[n];
int[] low = new int[n];
List<List<Integer>> res = new ArrayList<>();
List<Integer>[] graph = new ArrayList[n];
for (int i = 0; i < n; i++) graph[i] = new ArrayList<>();
for (int i = 0; i < connections.size(); i++) {
int u = connections.get(i).get(0);
int v = connections.get(i).get(1);
graph[u].add(v);
graph[v].add(u);
}
Arrays.fill(disc, -1);
helper(graph, 0, disc, low, -1, res);
return res;
} private void helper(List<Integer>[] graph, int node, int[] disc, int[] low, int prev, List<List<Integer>> res) {
disc[node] = timestamp;
low[node] = timestamp;
timestamp += 1;
for (int u : graph[node]) {
if (u == prev) continue;
if (disc[u] == -1) {
helper(graph, u, disc, low, node, res);
if (low[u] > disc[node]) {
res.add(Arrays.asList(u, node));
}
}
low[node] = Math.min(low[node], low[u]);
}

  

Contest 154的更多相关文章

  1. AtCoder Beginner Contest 154 题解

    人生第一场 AtCoder,纪念一下 话说年后的 AtCoder 比赛怎么这么少啊(大雾 AtCoder Beginner Contest 154 题解 A - Remaining Balls We ...

  2. Benelux Algorithm Programming Contest 2014 Final(第二场)

    B:Button Bashing You recently acquired a new microwave, and noticed that it provides a large number ...

  3. 「CometOJ」Contest #11

    Link Aeon 显然字典序最大就是把最小的字母放在最后 Business [动态规划] 简单dp dp[i][j]dp[i][j]dp[i][j]表示到第iii天,当前有jjj块钱,最后返还的钱最 ...

  4. Programming Contest Problem Types

        Programming Contest Problem Types Hal Burch conducted an analysis over spring break of 1999 and ...

  5. hdu 4946 2014 Multi-University Training Contest 8

    Area of Mushroom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  6. 2016 Multi-University Training Contest 2 D. Differencia

    Differencia Time Limit: 10000/10000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  7. 2016 Multi-University Training Contest 1 G. Rigid Frameworks

    Rigid Frameworks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  8. 1Z0-053 争议题目解析154

    1Z0-053 争议题目解析154 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 154.A database is running in ARCHIVELOG mode and ...

  9. hdu-5988 Coding Contest(费用流)

    题目链接: Coding Contest Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Ot ...

随机推荐

  1. 设计模式详解及PHP实现:代理模式

    [目录] 代理模式(Proxy pattern) 代理模式是一种结构型模式,它可以为其他对象提供一种代理以控制对这个对象的访问. 主要角色 抽象主题角色(Subject):它的作用是统一接口.此角色定 ...

  2. Ubuntu 14.04 下NFS安装配置

    1.执行命令:sudo apt-get install nfs-kernel-server; 2.执行命令:mkdir /home/jack/nfs-share 建立一个nfs服务的专有的文件夹; 3 ...

  3. brup安装证书抓取https

    brup安装证书抓取https 0x00下载 下载安装brup 前提是需要java环境 0X01配置brup 配置brup的代理设置 0X02设置浏览器 我使用的是火狐,以下都以火狐为例 0X03证书 ...

  4. FPGA小白学习之路(5)clk为什么要用posedge,而不用negedge(转)

    clk为什么要用posedge,而不用negedge 转自:http://www.cnblogs.com/dangxia/archive/2012/03/07/2383744.html Verilog ...

  5. Node REPL环境

    1.概述 REPL全称Read,Eval,Print,Loop,简单理解为接收用户输入,执行用户输入,打印执行结果并输出到控制台,进行下一次轮回,可以进行一些简单的测试,类似于浏览器的控制台. 命令行 ...

  6. iOS Swift 开发语言之初接触,纯代码创建UIView,UITableView,UICollectionView

    1. 初始化Label设置AttributeString override func viewDidLoad() { let label = UILabel(frame:CGRect(x:,y:,wi ...

  7. LeetCode---二叉树3-总结例题

    二叉树-总结例题 1-从中序与后序遍历序列构造二叉树 给定二叉树的后序遍历和二叉树的中序遍历 想法: 先根据后序遍历的最后一个元素构造根节点 寻找根节点在中序遍历中的位置 递归构建根节点的左右子树 / ...

  8. sql04

    1.类型转换 ),ClassId)+name from [user]; 2.一次性插入多条数据 3.日期函数 1)getdate() 返回当前日期 2)dateadd 计算增加后的时间 ,'2020- ...

  9. Electron打包H5网页为桌面运行程序

    一.安装配置环境 Electron(一种桌面应用程序运行时),Electron 把 Chromium 和 Node 合并到一个单独的运行时里面,很适合开发桌面 web 形式的应用程序,通过Node它提 ...

  10. JDBC概述及编程步骤详解

    目录 一.JDBC概述 二.JDBC编程步骤(以MySQL为例) 1.导入jar包 2.加载数据库驱动 3.通过DriverManager获得Connection对象 3.定义SQL语句 4.利用Co ...