ACM
ACM
W_Weirdo
这个作者很懒,什么都没留下…
展开
-
LeetCode 每日一题:528. 按权重随机选择
528. 按权重随机选择原题地址题目类型 题意 分析 前缀和 + 二分 时间复杂度 O()O( )O() 代码class Solution { int[] pre; int sum; public Solution(int[] w) { pre = new int[w.length]; pre[0] = w[0]; for (int i = 1, len = w.length; i原创 2021-08-30 10:03:18 · 81 阅读 · 0 评论 -
Codeforces Round #739 (Div. 3)
套题名称原题地址#题目分数是否ACA800✅B1000✅C2000✅D1800❌E2000❌F2300❌G2400❌H2400❌I2400❌J2400❌K2400❌L2400❌M2400❌N2400❌A. 题目题目类型 题意 分析 时间复杂度 O()O( )O()原创 2021-08-20 20:48:05 · 93 阅读 · 0 评论 -
Codeforces Round #597 (Div. 2)
Codeforces Round #597 (Div. 2)原题地址#题目分数是否ACAGood ol’ Numbers Coloring1000✅BRestricted RPS1200✅CConstanze’s Machine1400✅DShichikuji and Power Grid1900❌EHyakugoku and Ladders2300❌FDaniel and Spring Cleaning2300❌原创 2021-08-18 01:18:36 · 142 阅读 · 0 评论 -
Codeforces Round #738 (Div. 2)
Codeforces Round #738 (Div. 2)原题地址#题目分数是否ACAMocha and Math✅BMocha and Red and Blue✅CMocha and Hiking✅D1Mocha and Diana (Easy Version)✅D2Mocha and Diana (Hard Version)❌EMocha and Stars❌A. Mocha and Math原创 2021-08-17 17:13:09 · 83 阅读 · 0 评论 -
Educational Codeforces Round 77 (Rated for Div. 2)
Educational Codeforces Round 77 (Rated for Div. 2)原题地址#题目分数是否ACAHeating1000✅BObtain Two Zeroes1300✅CInfinite Fence1700❌DA Game with Traps1900❌ETournament2700❌A. Heating题目类型 数学代码 public static void s原创 2021-08-16 01:52:19 · 95 阅读 · 0 评论 -
Codeforces Round #592 (Div. 2)
Codeforces Round #592 (Div. 2)原题地址#题目分数是否ACAPens and Pencils800✅BRooms and Staircases1000✅CThe Football Season2000✅DPaint the Tree1800❌EMinimizing Difference2000❌FChips2300❌GRunning in Pairs2400❌原创 2021-08-15 22:33:56 · 77 阅读 · 0 评论 -
Codeforces Round #737 (Div. 2)
Codeforces Round #737 (Div. 2)原题地址#题目分数是否ACAEzzat and Two Subsequences800✅BMoamen and k-subarrays1100✅CMoamen and XOR1700❌DEzzat and Grid2200❌EAssiut Chess2800❌A. Ezzat and Two Subsequences题目类型 思维题意 给原创 2021-08-15 20:39:12 · 84 阅读 · 0 评论 -
Codeforces Round #516 (Div. 2, by Moscow Team Olympiad)
Codeforces Round #516 (Div. 2, by Moscow Team Olympiad)原题地址#题目分数是否ACAMake a triangle!800✅BEquations of Mathematical Magic1200✅COh Those Palindromes1300✅DLabyrinth1800✅EDwarves, Hats and Extrasensory Abilities1900❌原创 2021-08-15 19:53:27 · 85 阅读 · 0 评论 -
Educational Codeforces Round 12
Educational Codeforces Round 12原题地址A. Buses Between Cities题意给出 A 市到 B 市和 B 市到 A 市公交车、出发的频率以及需要的时间。判断当坐从 A 市到 B 市的某一辆车时,在到达 B 市的图中遇到的公交车的数量。分析遇到的公交车共有两种在 m 时刻从前出发但未到站在 m 时刻之后出发枚举所有从 B 市出发的车,然后判断是否可以遇到代码 public static void solve() throws IOExcep原创 2021-08-15 01:19:17 · 117 阅读 · 0 评论 -
Educational Codeforces Round 74 (Rated for Div. 2)
Educational Codeforces Round 74 (Rated for Div. 2)原题地址#题目分数是否ACAPrime Subtraction900✅BKill 'Em All1300✅CStandard Free2play1600✅DAB-string1900❌EKeyboard Purchase2200❌FThe Maximum Subtree2200❌GAdilbek and th原创 2021-08-14 10:18:50 · 338 阅读 · 0 评论 -
Kattis Problem - Square Peg in a Round Hole
Kattis Problem - Square Peg in a Round Hole原题地址题目类型:贪心、排序题意有 N 块圆形的地, M 个圆形的屋子和 K 个正方形的屋子。在地上修建屋子时不能触碰地的边界。给出每块地的半径以及圆形屋子的半径和正方形屋子的边长,求最多可以修建多少个屋子。分析可以想到,一个屋子在一块地上可以修建时应使地的半径尽可能小。圆形的屋子则可以直接比较半径,而正方形的屋子所占圆的半径是它的对角线的一半。所以将每个屋子的半径处理出来进行排序,再将地的半径进行排序,然后进原创 2021-08-06 10:55:32 · 235 阅读 · 0 评论 -
Kattis Problem - Saving For Retirement
Kattis Problem - Saving For Retirement原题地址题意Bob 从 BBB 岁开始直到 BrB_rBr 岁退休,每年存 BsB_sBs 元钱。Alice 现在 AAA 岁,每年可以存 AsA_sAs 元钱。求 Alice 在多少岁时退休存的钱比 Bob 退休时存的钱多。分析Bob 总共存的钱是 Bs∗(Br−B)B_s * (B_r - B)Bs∗(Br−B),所以 Alice 需要存 Bs∗(Br−B)/As+1B_s * (B_r - B) / A_s原创 2021-08-06 10:16:27 · 98 阅读 · 0 评论 -
POJ Problem 1195 - Mobile phones
POJ Problem 1195 - Mobile phones原题地址题目类型:二维树状数组题意在一个 S×SS \times SS×S 大小的矩阵中,进行单点修改,子矩阵查询。分析使用二维树状数组。代码static int[][] C;public static void solve() throws IOException { int tt = nextInt(); int S = nextInt(); C = new int[S + 10][S原创 2021-08-08 08:51:45 · 86 阅读 · 0 评论 -
AcWing Problem 1275 - 最大数
AcWing Problem 1275 - 最大数原题地址题目类型:线段树题意有两种操作:• 添加操作:每次向序列后添加一个数• 询问这个序列中最后 LLL 个数中最大值分析因为每次插入的数与上一次查询有关系所以必须动态在线做这题。求区间最大值可以想到用线段树,起初可认为线段树的叶子节点都为 000,然后每次添加一个数的时候再进行更新并维护最大值。代码static int[] C;public static void solve() throws IOException {原创 2021-08-08 08:51:19 · 72 阅读 · 0 评论 -
POJ Problem 2299 - Ultra-QuickSort
POJ Problem 2299 - Ultra-QuickSort原题地址题目类型:树状数组、逆序数、离散化题意给定一个序列,求出其中逆序数的个数。分析可以使用归并排序来求也可以使用树状数组来求,结果记得使用 longlonglong。在用树状数组求得时候需要使用离散化。代码static int[] a;static int[] C;static int[] all;static int aLen;public static void solve() throws IOExcep原创 2021-08-08 08:50:27 · 108 阅读 · 0 评论 -
POJ Problem 2182 - Lost Cows
POJ Problem 2182 - Lost Cows原题地址题目类型:树状数组、二分、标记题意有编号是 1~n1~n1~n 的 nnn 个数字, 2≤n≤80002 \leq n \leq 80002≤n≤8000, 乱序排列,顺序是未知的。对于每个位置的数字,知道排在它前面比它小的数字有多少个。求这个乱序数列的顺序。分析观察发现最后一位数可以直接确定,然后将这个数从 1−n1 - n1−n 的集合中划去,然后再看倒数第二个数,发现这个数应该是剩下的数中第 a[i]+1a[i] + 1a[i原创 2021-08-08 08:48:47 · 198 阅读 · 0 评论 -
POJ Problem 2352 - Stars
POJ Problem 2352 - Stars原题地址题目类型:树状数组、标记题意:在一个平面中给出一些星星得坐标(输入时按 yyy 递增得顺序给出,如果 yyy 相等则按 xxx 递增给出),定义一个星星的等级为在它左下方星星的数量,即 yyy 小于等于它且 xxx 小于等于它的星星的数量。输出 0~n−10~n-10~n−1 每种等级星星的数量。分析:因为输入是按 yyy 递增的顺序输入的,所以对于当前输入,它的等级就是在它之前的输入中 xxx 比它小的星星的个数。所以这里可以用树状数组对原创 2021-08-08 08:46:35 · 65 阅读 · 0 评论 -
AcWing Problem 241 - 楼兰图腾
AcWing Problem 241 - 楼兰图腾原题地址题目类型:树状数组 + 标记题意分别统计这样的三元组的个数:1.(yay_aya, yby_byb, ycy_cyc)其中 ya>yby_a > y_bya>yb 、yb<ycy_b<y_cyb<yc 、0<a<b<c≤n0 < a < b < c \leq n0<a<b<c≤n2.(yay_aya, yby_byb, ycy_cy原创 2021-07-29 17:20:39 · 76 阅读 · 0 评论 -
AcWing Problem - 一个简单的整数问题2
AcWing Problem - 一个简单的整数问题2原题地址题目类型:树状数组题意有两种操作:• 查询区间 [l, r] 内的和• 对 [l, r] 内所有数加上 d分析使用两个树状数组来维护代码static int[] a;static long[] C1;static long[] C2;public static void solve() throws IOException { int n = nextInt(); int m = nextInt();原创 2021-07-29 17:06:18 · 56 阅读 · 0 评论 -
AcWing Problem - 一个简单的整数问题
AcWing Problem - 一个简单的整数问题原题地址题目类型树状数组题意有两种操作:• 求数组中一段区间的和• 修改数组中某一个数分析使用树状数组和差分的思修来维护。时间复杂度 n logn代码static int[] C;static int[] a;public static void solve() throws IOException { int n = nextInt(); int m = nextInt(); init(n)原创 2021-07-29 17:02:27 · 62 阅读 · 0 评论 -
CodeForces Problem - Segments Removal
CodeForces Problem - Segments Removal原题地址题目类型:链表、Set题意给定一个整数序列,每次选择元素相同的最长的连续的子串然后删除,删除后左右两边的部分会拼接起来,如果有多个这样的子串则选择最左边的。求按照如上规则多少次操作后源串会变为空串。分析首先将连续的子串处理为 num 和 cnt 表示,然后用静态链表存储,并用 TreeSet 保存,使得 set 最后一个元素为长度最长且是最左边得子串。然后模拟执行上面得操作,每次删除一个子串后将其链表中左右两边得节原创 2021-07-29 16:57:06 · 63 阅读 · 0 评论 -
AcWing Problem1250 - 格子游戏
AcWing Problem1250 - 格子游戏原题地址题目类型:并查集题意在一个 n x n 的点阵中,两个人轮流在相邻的点与点之间连线,当连线出现一个封闭的圈时游戏结束。但是现在游戏进行了很多回合已经无法辨别游戏的结果。给定点阵的大小 n 和 m 次操作,判断游戏的结果,如果结束了则输出结束的回合。分析观察发现,当出现封闭的圈时在连最后一条线时圈中剩余的线都属于一个连通块,所以将已经进行过的操作用并查集维护,连一条线时就将两个顶点放入一个集合,如果在连线时发现两个顶点已经属于一个集合,那原创 2021-07-29 16:51:05 · 83 阅读 · 0 评论 -
Kattis Problem - The Weight Of Words
Kattis Problem-The Weight Of Words原题链接题意有一个名叫“单词的权重”的游戏,游戏规定26个小写字母即 ‘a’~‘z’ 的权重分别为 1~26。现在给定一个字符串的长度 L 和其所有字符的权重和 W,判断满足这两个条件的字符串是否存在,如果存在则输入满足条件的任意解,否则输出 “impossible”。分析因为如果存在解可以输入任意解,所以可以进行构造。我们可以求出字符串的最小权重和最大权重即1 * L 和 26 * L,如果 W 不在这个区间则一定无解。如果存在原创 2021-05-08 16:37:44 · 120 阅读 · 0 评论 -
Kattis Problem - Prozor
Kattis Problem - Prozor原题链接题意有一个 R x S 大小的矩形窗户,在窗户上趴着一些苍蝇,现在有一个边长为 K 的正方形苍蝇拍,求拍一次所能攻击到的苍蝇的最大数量(苍蝇拍一定是拍在窗户内部,且边界处的苍蝇是可以逃走的所以不计数),在窗户中 ‘*’ 代表苍蝇 ‘.’ 代表空白。分析因为边界处的苍蝇不计数,所以枚举所有 边长为 k -1 的正方形中苍蝇的数量然后取最大值,枚举所有正方形可以通过预处理矩形的二维前缀和优化。具体细节参考代码。代码import java.io原创 2021-05-08 17:08:55 · 66 阅读 · 0 评论 -
Kattis Problem - Radio Commercials
Kattis Problem - Radio Commercials原题链接题意给定 n 个连续的时间段期间收看广告的人的数量,和发布一个广告所需要的费用 p,假设每有一个人收看广告则会有一元的收益。现在需要找一个连续的播放广告的时间段子序列使收益总和最大。分析设 dp[i] 是以第 i 段结尾的收益的最大和状态转移如果 dp[i - 1] < 0 则说明 dp[i-1] 对 dp[i] 做负贡献,即 dp[i-1] + a[i] < a[i]。所以当 dp[i-1] >原创 2021-05-08 18:36:20 · 210 阅读 · 0 评论 -
Kattis Problem - Jewelry Box
Kattis Problem - Jewelry Box原题链接题意给定一个大小为 X * Y 大小的 卡纸,然后在其中裁取如下图形然后用裁下的部分拼成一个无盖的矩形纸盒,然后求可拼成矩形纸盒的最大体积。分析根据带入一些值和所给的样例结果发现,纸盒的体积随高 h 的变换称一个凸函数,所以使用三分来求出纸盒体积的最大值。具体细节可参考代码代码import java.io.BufferedReader;import java.io.BufferedWriter;import java.i原创 2021-05-13 10:33:02 · 133 阅读 · 0 评论 -
Kattis Problem-Unique Snowflakes
Kattis Problem-Unique Snowflakes原题链接题意给定一个整数序列,找出最长的不重复子串的长度。分析使用双指针,枚举每个指针 I,然后每次判断指针 j 最远可以指到那里。代码public static void solve() throws IOException { int n = nextInt(); int[] a = new int[n]; for (int i = 0; i < n; i++) a[原创 2021-07-08 14:12:04 · 80 阅读 · 0 评论 -
Kattis Problem-Lektira
Kattis Problem-Lektira原题链接题意:在一个字符串上任选两个位置进行切割将其分为 3 段,并将每一段进行反转,然后再按原来的顺序拼接起来。求通过该操作可以获得的字典序最小的字符串。分析因为题目的数据范围较小,所以可以暴力枚举所有切割点,然后选取字典序最小的那个。代码public static void solve() throws IOException { char[] s = next().toCharArray(); char[] a = new ch原创 2021-07-06 19:44:30 · 95 阅读 · 0 评论 -
Kattis Problem - Keyboardd
Kattis Problem - Keyboardd原题地址题目类型:字符串、映射题意:有一个键盘,其中部分键坏了,按一次会会在屏幕上输入两次。现在给出正确的输入的字符串 s 和用这个坏键盘输入这个字符串后在屏幕上显示的字符串 t。通过这两个字符串确定出是那些键坏了。分析:因为坏的键按一下会打印两次,若一个键是坏的话则它在 s 中一个其中字符相同的连续的子串长度为 l,那么对应在 t 中其长度就应该是 2 * l。那么就检查 s 中每一个连续相同的子串在 t 中显示的长度是否是 2 * l,如果原创 2021-07-29 00:33:03 · 111 阅读 · 0 评论 -
Kattis Problem - Planina
Kattis Problem - Planina原题地址题目类型:规律题意:首先平面上有四个点形成的方块,每次进行如下操作:在相邻顶点的中间添加一个点以及在此方块的中心添加一个点。求经过 N 此迭代后点阵中点的数量。分析:枚举观察几个样例后发现点阵边上点的数量的变化规律为 x+(x −1),而点阵中点的数量则是边长的乘积。因为数据范围较小可以事先打表提升效率(貌似没啥用)。代码:static final int[] TB = {0, 9, 25, 81, 289, 1089, 4225, 1原创 2021-07-29 00:24:23 · 91 阅读 · 0 评论 -
Kattis Problem - Hot Springs
Kattis Problem - Hot Springs原题地址题目类型:构造题意:重排一个含有 n 个整数的序列,使得所有的 |a_(i−1) − a_i |≤|a_i − a_(i+1) |。分析:先对数组排序。然后考虑最大的差的绝对值是 a_max − a_min, 然后将最大值放在第 n - 1 的位置,将最小值放在第 n 的位置。然后再剩下的数中选择最大值和最小值,按相同的逻辑进行构造。代码:public static void solve() throws IOExcept原创 2021-07-29 00:12:13 · 268 阅读 · 0 评论 -
Kattis Problem - Jack-O‘-Lantern Juxtaposition
Kattis Problem - Jack-O’-Lantern Juxtaposition原题地址题目类型:数学、排列组合题意:现在有眼睛、鼻子、嘴巴三种设计分别有 N、T、M 种。可以通过随意从中各取一个进行组合得到不同的设计。统计总共有多少种不同的设计。分析:排列组合问题。代码:public static void solve() throws IOException { int N = nextInt(); int T = nextInt(); int M =原创 2021-07-29 00:08:33 · 101 阅读 · 0 评论 -
Kattis Problem - Sibice
Kattis Problem - Sibice原题地址题目类型:数学题意:在地上散落了一些火柴,每个火柴都有各自的长度,现在需要将它们收集到一个长 h、宽 w 的火柴盒中,判断有哪些火柴可以装进去,哪些不可以装进去。分析:火柴盒可以装的最大长度的火柴是它的斜边的长度,然后用每个火柴和斜边的长度进行比较。代码public static void solve() throws IOException { int n = nextInt(); int w = nextInt();原创 2021-07-29 00:03:25 · 110 阅读 · 0 评论 -
LeetCode 每日一题:1190. 反转每对括号间的子串
LeetCode 每日一题:1190. 反转每对括号间的子串原题链接分析:将括号的反转理解为逆序的遍历括号,然后通过栈预处理出每个括号对应的括号的索引方便跳转。代码:class Solution { public String reverseParentheses(String s) { Stack<Integer> st = new Stack<Integer>(); int[] book = new int[s.length()原创 2021-05-26 14:05:14 · 78 阅读 · 1 评论 -
LeetCode 每日一题 :1738. 找出第 K 大的异或坐标值
LeetCode 每日一题 :1738. 找出第 K 大的异或坐标值原题链接分析根据题意可得是要求所有以(0,0)为左上顶点的子矩阵异或和的第 K 大值。所以可以处理出一个二维前缀异或和,然后将所有值放入一个容器中取出第 K 大值(可以排序后求或者使用快速排序的思想来求)。代码1class Solution { public int kthLargestValue(int[][] matrix, int k) { int n = matrix.length;原创 2021-05-19 17:42:15 · 89 阅读 · 0 评论 -
LeetCode 每日一题:1442. 形成两个异或相等数组的三元组数目
LeetCode 每日一题:1442. 形成两个异或相等数组的三元组数目原题链接分析:维护一个异或前缀和数组 pre(pre[i] 表示 [0,i) 之间所有数的异或和),那么问题所求的两个 a、b 数组则可以表示为a: pre[i] ^ pre[j]b: pre[j] ^ pre[k]那么 a == b => pre[i] ^ pre[j] = pre[j] ^ pre[k] => pre[i] = pre[k]所以枚举所有的 i 、j、 k 并统计答案即可代码:O(n^3)原创 2021-05-18 07:54:19 · 81 阅读 · 0 评论 -
LeetCode 每日一题 :993. 二叉树的堂兄弟节点
LeetCode 每日一题 :993. 二叉树的堂兄弟节点原题链接分析:判断两个节点是否为堂兄弟节点就需要判断它们的父节点是否不同以及它们的高度是否相同。那么问题就变为了求两个节点的父节点及其高度。使用深度优先遍历这棵树即可。代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; *原创 2021-05-17 17:26:27 · 87 阅读 · 0 评论 -
Kattis Problem - Contest Struggles
Kattis Problem - Contest Struggles原题地址题目类型:数学题意:给出 n 道题难度的平均分 d(一道题难度的分值为[0, 100]),猜测其中 k 道题难度的平均分为 s。判断这个猜测是否正确,如果正确输出剩余题目的平均分,否则输出 impossible。分析:通过 n * d 算出总分数,然后减去 k * s 得到剩余题目难度的总分,然后再除 n - k,判断结果是否在 [0, 100]范围内(输出时注意精度)。代码:public static void原创 2021-07-28 23:55:46 · 109 阅读 · 0 评论 -
Kattis Problem-Missing Gnomes
Kattis Problem-Missing Gnomes原题地址题意给定 n 的排列的一个子序列,然后求出在 n 的排列中含有该子序列且字典序最小的排列。分析贪心,想要最终的字典序最小,那么可以维护一个在子序列中未出现数字的集合,然后依次枚举每一个位,每次选子序列中和未使用的数字中较小的那个来填充。代码public static void solve() throws IOException { int n = nextInt(); int m = nextInt();原创 2021-07-09 09:06:38 · 75 阅读 · 0 评论 -
Kattis Problem - The Maze Makers
Kattis Problem-The Maze Makers原题链接题意给定一个由 16 进制数据描述的迷宫,判断是否是以下四种情况之一:1、从起点无法到达终点2、至少存在一对点是不连通的3、对于一对点之间不止一条简单路径4、不存在上述 3 种情况,地图是 Ok 的分析题目本身并不难,只不过需要理解到如何去建图(并不是真的把迷宫画出来,这样有点繁琐)。因为迷宫中一个格子是由一个 16 进制的数来描述,其上、右、下、左的状态由其 16 进制数对应位置的二进制位(高位到低位)来表示,1 代表原创 2021-07-06 17:20:18 · 99 阅读 · 0 评论