自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 A1. Prefix Flip (Easy Version)

传送门 一种O(n)的做法 可以发现,当选择首或者尾时候(以尾为例),数字翻转,然后倒置,再翻转过来,其实和原字符串是一样的。那么就可以从后往前当某个位置不同时,将前面的翻转倒置,然后将第一个再翻转一次,然后再选择之前的那个位置再倒置一下,就只会将那个不同的变成相同的了。 #include <iostream> #include <cstring> #include <string> #include <vector> #include <strin

2021-02-16 20:19:27 244 1

原创 B. Strange List

传送门 两天没做题要废了 一道思维题,我的做法是不停的循环,直到遇到不可整除的。 其实可以发现,对于每个可以整除x的数,整除后后面添加的这些数字总和还是这个数字,用这个性质计算。 #include <iostream> #include <algorithm> using namespace std; typedef long long LL; const int N = 100010; int a[N]; void solve(){ int n, x; LL sum = 0

2021-02-15 19:38:43 220 1

原创 C. Two Brackets(思维)

传送门 一道水题 统计一下有多少对能匹配的就好了 My solution #include <iostream> #include <cstring> #include <string> using namespace std; void solve(){ string str; cin >> str; int cnt1 = 0, cnt2 = 0, ans1 = 0, ans2 = 0; int len = str.size(); for(i

2021-02-11 00:31:22 117

原创 B. Toy Blocks

传送门 很有意思的一道题 一看题目位置,再一看题目数据大小,是贪心又没跑了。 为了使 n - 1 个盒子都相等,那么可以知道假设相等,分好后的每个盒子的小球数量要 >= 之前盒子中球数量的最大值。 等于的情况是总数 ** sum % (n - 1) == 0 ** 大于的情况是总数 ** sum % (n - 1) != 0** 等于的跳过,对于大于的情况,那么也就是说分不均。在这种情况下,就要多拿出来一些小球。而数量如何确定呢? 判断平均值和最大值的那个盒子哪个更大。 最后用这个值乘以(n

2021-02-11 00:17:17 138

原创 Long Jumps(思维)

传送门 看了题目数据大小,又是贪心,时间复杂度O(N),这几天一直做B/C题把自己给做出PTSD来了都。 我の思路 假设选定任意一个下标从当前位置开始计算,那么它后面的相应的数字都会被计算上。 也就是说,当后面再在后面选择的时候,就有可能会选到从前面跳过去的数字,这样的话就会造成重复计算,也就是说,从前面选比从后面选择更优,或者说,最好是从前面选,然后每一次碰到的都标记上,这样在后续遍历的时候假设碰到之前跳到这里了就不需要再重复计算了。 My solution ?????????????????????

2021-02-11 00:06:40 284

原创 待补题目

B. Array Walk

2021-02-05 00:31:08 72

原创 C. String Equality

传送门 很有意思的一道题。 刚开始的想法是既然a串中的元素可以任意变动位置,那么就将两个串排序好然后进行一一对应判断就好了 如果a串中的当前元素大于b串中的当前元素,就是"No" 如果等于下一个,如果小于,判断能不能变,如果能变的话就变,不能变也是“No" 但是这样会忽略一个情况,就是如果变后可能后面隔着很多字符也会有和变后相同的,而变后的这一串如果不加上后面那个相同的就不能变了,而现在又和b串的字符不相等,又变不了。所以这个思路是错的。 附一下错误代码 sort(a.begin(), a.end()

2021-01-30 12:35:57 113

原创 E1. Close Tuples (easy version)(双指针)

E1. Close Tuples (easy version) 这道题算是只想出来了一半,在选数的时候,考虑了多种组合,如:1 1 1 2 2 3 3 4 4,当时的想法是找到对当前第一个数满足条件的最后一个数,然后用Clen3C_{len}^{3}Clen3​ 统计一下有多少,然后这样思路就踩了两个坑: 第一个就是这样选择会有重复的情况,如1 到 3 选的时候选了2 2 3,那么在从2开始计数的时候就会又选2 2 3,那么这就出现重复情况,无法继续计算。 第二个就是按照这种方法,假如是1 1 1 2 2

2021-01-29 10:07:24 186

原创 约会安排(线段树区间和并)

传送门 差点把自己给做吐了 区间合并的题目,虽然自己做着很难受,做了两天,不过又加深了对区间和并以及懒标记以及相关操作的认识。 有一说一,线段树的代码真是又臭又长 设置了两个懒标记,一个是屌丝的,一个是女神的 女神的优先级要高于屌丝 当只对屌丝进行操作时,与女神没有关系。而当对女神进行操作时,屌丝维护的各种信息也要进行相应的操作,说白了也就是时间被占用。 当初设置的两个懒标记的姿势不太正确,冲突了 #include <iostream> #include <cstdio> #in

2021-01-27 23:32:08 130

原创 C Mandarin Orange(贪心+思维)

传送门:C Mandarin Orange 考察算法:思维 + 贪心 枚举数组中的每个数,其中对于任意一个数字,往两边找连续的大于等于这个数的个数,如果碰到小于这个数的数字就停下。 可以证明,可以从小的数字往两边扩展到这个大的数字,而不需要大的数字向小的数字扩展。这样在枚举的同时记录一下最大值,最后就能得出答案。 #include <iostream> #include <algorithm> using namespace std; int a[10010]; int mai

2021-01-24 01:00:30 246

原创 奖学金(结构体排序)

奖学金 纯度很高的排序题(结构体排序) #include <iostream> #include <algorithm> using namespace std; struct Node{ int all; int chi; int math; int eng; int id; }node[305]; bool cmp(Node a, Node b){ if(a.all != b.all) return a.all > b.all; else if(a.chi

2021-01-17 00:28:44 281

原创 校门外的树

校门外的树 由于路的长度最大只到10000,那么开一个长度为10000多一点的数组统计一下就好了。 #include <bits/stdc++.h> using namespace std; bool vis[10010]; int main(){ int l, m; cin >> l >> m; while(m --){ int l, r; cin >> l >> r; for(int i = l; i <= r; i

2021-01-17 00:25:35 176

原创 待补算法

扫描线 线段树 ST表 三分/三分套三分 滑动窗口

2021-01-15 23:11:54 74

原创 移除最多的同行或同列石头

移除最多的同行或同列石头 刚学会markdown拿来练手 解法1:dfs遍历 Cow Picnic S 这两道题基本上是一样的,都是进行遍历查找。 将在同一行或者同一列的点建立成一张图,易知对于每一个联通的块,都可以将其逐渐删成一个点。因此,最后统计一下有多少个联通的块,就能知道最多可以去掉多少个点了。 //bool vis[1010]; public: void dfs(vector<vector<int> >&graph, int x, vector&lt

2021-01-15 19:46:11 101

原创 分巧克力

纯度很高的一道二分题目( 对巧克力进行分的时候要统计一下每一块巧克力在当前的长度下能分多少块,而在这其中又会出现一个小小的问题就是该如何统计,其实并不是用这块巧克力的面积直接除以长度,而是要用该巧克力的长和宽分别除以长度,然后再相乘处理。 #include <iostream> using namespace std; int len[100010], wid[10010], n, k; bool check(int ans){ int cnt = 0; for(int i = 1; i

2021-01-15 01:05:46 72

原创 减绳子(二分)

剪绳子 很简单的二分题目 不过这道题是浮点数二分,和整数二分是有点区别的。当时就卡了半小时 由于绳子的长度范围是0~10^9,因此二分的范围就是0——10 ^ 9。 #include <iostream> #include <iomanip> #include <algorithm> using namespace std; int n, m; int a[100010]; bool check(double mid){ int cnt = 0; for(int i

2021-01-14 12:56:11 69

原创 回文平方

题目链接 很简单的一道题,考查了两个基本的知识点,一个是进制转换,另一个是判断回文字符串。 #include <iostream> #include <string> using namespace std; int n; string get(int num){ string str; //cout << num << endl; while(num){ if(num % n < 10){ str += num % n + '0

2021-01-13 22:11:58 56

原创 待补题

String Rotation C - Modulo Summation

2020-12-29 15:56:52 73

原创 C. Peaceful Rooks

C. Peaceful Rooks 图论的一道题目,这道题可以用并查集来维护。 每当题目给出一个坐标,将这个坐标分解成两个点,然后将这两个点串起来,后面的点同理,不过还要判断是否能够和前面的点串起来,如果能串起来就串。最后需要判断在某一个点时是否能够串成一个环。如果串不成一个环,那么这些穿起来的就是一条路径,而路径就不需要再对其中的某一个点进行让步操作了,直接移动就好了。 如果能够串成一个环,那么就代表点之间有冲突,解决办法就是移动其中的一个点(首尾都行),那么对于这个环内的点来说,移动的答案就是点的个数加

2020-12-26 10:42:49 354

原创 B. Suffix Operations

B. Suffix Operations 这道题当时想了半小时差点没想吐。 个人理解:题目要求将所有数字变成一样的,那么不难得到前提就是让所有数字都变成第一个数字。因为如果带上第一个数字一起变那么就相当于全都变,没有意义。 当后面的数字都向第一个数字看齐的时候,首先不考虑免费变一次的情况。在这个前提下,代价是从第二个开始,每个数与前一个数字的差值的绝对值。下面是简单的证明:要是第二个数字与第一个相同,那么代价便是两个数差值的绝对值。由于将第二个数字变成和第一个数字一样的时候,后面的数字也会跟着做相应的增减,

2020-12-05 23:56:21 351

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除