进阶指南每日一题地址
atcoder训练地址
leetcode max ratings:2100
22/4/16 LCP春季杯
LCP 54. 夺回据点
22/3/6 第73场双周赛:T4
22/3/7 第 283 场周赛:ak
22/3/13 第 284 场周赛:T4
22/3/19 第74场双周赛:ak
罚时好高。。。。。。
22/3/20 第 285 场周赛:T4 老了,码不动了,
22/3/27 第 286场周赛:ak
罚时好高。。。。。。(wa了两发)
22/4/2 第 75 场双周赛:ak
这场做的有点滑水
22/4/3 第 287场周赛:ak
罚时好高。。。。。。(TLE了15发)
+=
a了string ans; ans = ans + char(c); ans += char(c);
22/4/10 第 288场周赛:3 罚时好高.
审题审题!!!!!!!!
22/4/16 第 76 场双周赛:ak
这场做T2,T3都wa了一发 赛后还能被hack掉翻车了,
tricks
最大,次大,次次大。dp状态由于没设置好。赛后还能被 x22/4/17 第 289 场双周赛:ak
T4边界1wa,T3没考虑一种转移1wa
ak
手速场:
动力小子的一句话: faster, faster
T2因为写法,TLE了两发,其实复杂度是对的。
一个元素在最后的交集里, 当前仅当 这个元素出现了n次。
ak
时隔6个月,再次打leetcode,罚时上天。最后1min侥幸ak。(想起了几天前的codeforces div4也是最后1min ak)。。。。老了老了
performance :1637.27
ak
没有IDEA我什么不是。想起了去年打蓝桥的时候,赛时才知道不给用codeblocks(本人还会vscode),只能用dev-c++,调环境都用了2h,结果可想而知。
赛后看了一些大佬的解法,在发现写法后,不妨先想下,是否可以更简洁,
static int cal(String x){
int v1 = Integer.parseInt(x.substring(0,2));
int v2 = Integer.parseInt(x.substring(3,5));
return v1*60+v2;
}
// min(r1,r2) >= max(l1,l2);
ak
finish Time: 1:25:03
PenaltyTime: 1:25:03
dirty 0
rank 412
T1写的太丑了。。。赛时不知道java里两个数组怎么判断相同,之前暴力for循环了,其实List中封装的equals可以解决,比较两个数组相等的问题。
T2:一开始读错题目了 寄。。。。
最近突然发现 arignote 是写java的
T4:没有贯彻用java,用c++的set去暴力了。。。
faster,faster!!!!
int dif[][]
//比较两个数组是否相等。
if(IntStream.of(dif[i]).boxed().toList().equals(IntStream.of(dif[j]).boxed().toList())) cnt++;
// arignote tql!!
return Stream.of(queries)
.filter(t -> Stream.of(dictionary).anyMatch(
u -> IntStream.range(0, u.length()).filter(v -> t.charAt(v) != u.charAt(v)).count() < 3))
.toList();
cNums[i] = nums[i] - nums[i]/c*c;
cNums[i] = nums[i] % c;
ak
finish Time: 0:58:41
PenaltyTime: 1:03:41
dirty 1
rank 151
前面被T2的模拟(hash表)耽误了不少时间。主要还是对java的map相关的操作不是很熟悉。T4的树形dp写的也有点久。
感觉codeforces rank有提升除了后期的题目之外,就是罚时了吧。
faster,faster!!!!
//arignote 的写法经验到了,比我熟练太多了
IntStream.of(nums)
.filter(k -> k%6 == 0).average().orElseGet(()->0);
/* ---- nest -------*/
Map<String, PriorityQueue<Integer>> map = new HashMap<>();
//如果Map中缺少这个key,使用这个方法。
map.computeIfAbsent(name, key -> new PriorityQueue<Integer>(
(o1,o2)-> o1-o2
)).add(queueEntry);
ak
finish Time: 0:51:56
PenaltyTime: 0:56:56
dirty 1
rank 122
拿到了内推机会??
这场的T1写的时候,不知道怎么把0移到后面,就写了两个for暴力移动,赛后看到大佬原来定义排序规则就可以了.自定义的比较函数只能对封装类有效。所以我们可以用流解决。
前几周都写出了dp,最近有点飘,最后还是用了trick,去跑了网络流
int[] nums;
return IntStream.of(nums).boxed().sorted((o1,o2) ->{
if(o2 == 0) return -1;
else if(o1 == 0) return 1;
return 0;
}).mapToInt(v -> v).toArray();
关键结论:
ak
finish Time: 0:46:31
PenaltyTime: 0:46:31
dirty 0
rank 239
这场的T3,没想到正解。赛后看到好多大佬都是循环节的做法,学习了。T3的排序假如是相邻位置,是用归并解(顺便复习了下,归并排序)。T4比较简单,变成了手速场。速度感觉还是可以提升的。
finish Time: 0:49:41
PenaltyTime: 0:54:41
dirty 1
rank 602
这场的T2码的二分有点久
T3的正解想得有点久。。。。中间还wa了一发
T4简单的优化,可能是没写式子,不好看出来。。。。
这里花了10min去写二分
其实二分的边界可以总结一下:
如果向 l l l收缩,就 m i d = l + r + 1 > > 1 mid = l + r + 1>>1 mid=l+r+1>>1
如果向 r r r收缩, 就 m i d = l + r > > 1 mid = l + r >> 1 mid=l+r>>1
//from arignote
class Solution {
public List<List<Integer>> closestNodes(TreeNode root, List<Integer> queries) {
TreeSet<Integer> set = new TreeSet<>(Set.of(-1));
closestNodes(root, set);
return queries.stream().map(t -> List.of(set.floor(t), set.ceiling(t) == null ? -1 : set.ceiling(t))).toList();
}
private void closestNodes(TreeNode root, TreeSet<Integer> set) {
if (root != null) {
set.add(root.val);
closestNodes(root.left, set);
closestNodes(root.right, set);
}
}
}
∣ i = 1 n ∣ 1 k d p [ i ] [ j ] = ∑ 0 t = i − m i n L e n d p [ t ] [ j − 1 ] |_{i=1}^{n} |_{1}^{k}dp[i][j] = \sum_{0}^{t = i-minLen}dp[t][j-1] ∣i=1n∣1kdp[i][j]=∑0t=i−minLendp[t][j−1]
我们发现这个式子的时间复杂度是 O ( n ∗ n ∗ k ) O(n*n*k) O(n∗n∗k)
由于每次 d p [ i ] [ j ] dp[i][j] dp[i][j]的答案在前面已经计算出来了,所以我们记录下就可以了
ak
finish Time: 0:30:30
PenaltyTime: 0:30:30
dirty 0
rank 168
refresh maxRaing 2183!!!
大佬说手速场,qwq
T1:赛后看到了数学解法,%%%%%
T4:赛时,没想好前缀和,用了两维
finish Time: 0:34:58
PenaltyTime: 0:34:58
dirty 4
rank 1341
不找借口,没写出来就是没写出来!!!
T3因为初始化问题,wa了3发。static int ans = Integer.MAX_VALUE;//这个要在函数里初始化!!!!!!!!!
5,10,22,32,42,44
单调队列
区间dp: 1
网易笔试题
2022LCP
小球问题