基础算法
算法
百里渠
这个作者很懒,什么都没留下…
展开
-
C. String Equality
传送门 很有意思的一道题。 刚开始的想法是既然a串中的元素可以任意变动位置,那么就将两个串排序好然后进行一一对应判断就好了 如果a串中的当前元素大于b串中的当前元素,就是"No" 如果等于下一个,如果小于,判断能不能变,如果能变的话就变,不能变也是“No" 但是这样会忽略一个情况,就是如果变后可能后面隔着很多字符也会有和变后相同的,而变后的这一串如果不加上后面那个相同的就不能变了,而现在又和b串的字符不相等,又变不了。所以这个思路是错的。 附一下错误代码 sort(a.begin(), a.end()原创 2021-01-30 12:35:57 · 109 阅读 · 0 评论 -
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 · 184 阅读 · 0 评论 -
C Mandarin Orange(贪心+思维)
传送门:C Mandarin Orange 考察算法:思维 + 贪心 枚举数组中的每个数,其中对于任意一个数字,往两边找连续的大于等于这个数的个数,如果碰到小于这个数的数字就停下。 可以证明,可以从小的数字往两边扩展到这个大的数字,而不需要大的数字向小的数字扩展。这样在枚举的同时记录一下最大值,最后就能得出答案。 #include <iostream> #include <algorithm> using namespace std; int a[10010]; int mai原创 2021-01-24 01:00:30 · 244 阅读 · 0 评论 -
奖学金(结构体排序)
奖学金 纯度很高的排序题(结构体排序) #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 · 276 阅读 · 0 评论 -
校门外的树
校门外的树 由于路的长度最大只到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 · 172 阅读 · 0 评论 -
回文平方
题目链接 很简单的一道题,考查了两个基本的知识点,一个是进制转换,另一个是判断回文字符串。 #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 · 55 阅读 · 0 评论 -
减绳子(二分)
剪绳子 很简单的二分题目 不过这道题是浮点数二分,和整数二分是有点区别的。当时就卡了半小时 由于绳子的长度范围是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 · 67 阅读 · 0 评论 -
分巧克力
纯度很高的一道二分题目( 对巧克力进行分的时候要统计一下每一块巧克力在当前的长度下能分多少块,而在这其中又会出现一个小小的问题就是该如何统计,其实并不是用这块巧克力的面积直接除以长度,而是要用该巧克力的长和宽分别除以长度,然后再相乘处理。 #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 · 71 阅读 · 0 评论