- 博客(13)
- 收藏
- 关注
原创 5666. 回文串分割 IV
思路:其实就是枚举第二个回文串的起点和终点,这样子,三个回文串的起点和终点都有了。只要三个区间都是回文即可。那么我们考虑如何判断一个区间是不是回文串呢?做法有很多,这里n只有2000所以允许n^2的做法 我们可以枚举回文中点去左右拓展,也可以去区间dp这里介绍的是区间dp。dp[i][j]表示第i个字符到第j个字符之间是不是回文串 是的话就为1,不是就为0l==r 显然dp[l][r]=1l+1==r dp[l][r]= s[l] == s[r]其他 即r-l+1>=3 dp[l][r]
2021-01-31 13:26:11 134
原创 归并排序
归并排序基本思想归并排序是每次选取当前序列的中点,分为两部分,继续递归下去,直到左右两部分已经有序,然后合并的话,利用一个数组从小到大存下来左右两部分的值,然后从左端点到右端点依次赋值即可,存两部分的值其实是用到了双指针的思想代码#include<stdio.h>const int N=1e5+50;int a[N],temp[N];void merge_sort(int l,int r){ if(l>=r) return ; int mid=l+r>&
2021-01-29 22:45:23 70
原创 C++ 继承
1、类的继承类的继承指的是,新的类从已有的类中获得已有的特性。新的类成为派生类,也叫子类,被继承的类叫做基类,也叫做父类。下面是继承的基本格式class 派生类:继承方式 基类1,继承方式 基类2,......,继承方式 基类n{}在C++中,允许多继承下面代码段是D以公有继承的方式继承了A,以私有继承的方式继承了B,以保护继承的方式继承了C三种继承方式的说明会在下文提到class A{};class B{};class C{};class D:public
2021-01-29 21:55:51 199
原创 C++ 友元
友元关系的引入考虑一个问题,对于一个Point类,用来保存一个坐标,即它有两个实数型变量是它的坐标,那么我们现在想要计算点与点之间的距离,这个函数要放在哪里比较合适?①放在类中作为类的成员函数吗?但是这个函数不属于单独的一个点,也不属于Point类。②放在类的外面定义为普通函数吗?但是这样就体现不了这个函数与Point类的关系,并且不能直接访问点的坐标(私有成员)所以这里就引入了友元关系友元关系:提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制也就是说通过友元关系,
2021-01-27 15:49:14 142
原创 快速排序
原理本质其实是一个分治的过程,每次选定一个基准,将小于等于基准的都移动到左边,将大于等于基准的都移动都右边。然后继续递归跑基准左右两部分。代码实现#include<stdio.h>const int N=1e5+50;int a[N];void quick_sort(int l,int r){ if(l>=r) return ; int i=l-1,j=r+1,x=a[l+r>>1]; while(i<j){ do i+
2021-01-26 00:05:12 77
原创 C++ 析构函数
1、析构函数析构函数,其实就是构造函数的相反操作,构造函数是创建对象时候,用来给对象的成员数据赋值的,而析构函数是用了清理对象的。2、析构函数的特点①析构函数就是位取反运算符+类名表示。②构造函数可以有多个,而析构函数只能有一个,不可重载,不能有参数。③与构造函数相同,析构函数没有返回值。如果没有显式写出析构函数,编译器会自动加上一个默认的析构函数,如果写了的话,就不会再加。#include<bits/stdc++.h>using namespace std;class Poin
2021-01-25 17:21:15 2566
原创 leetcode 第225场周赛 题解
替换隐藏数字得到的最晚时间思路:直接暴力判断赋值即可。class Solution {public: string maximumTime(string t) { if(t[0]=='?' && t[1]=='?') t[0]='2',t[1]='3'; else if(t[0]=='?'){ if(t[1]>='4') t[0]='1'; else t[0]='2'; }
2021-01-24 21:40:24 391 1
原创 leetcode 第44场双周赛 题解
找到最高海拔思路:前缀和一下,恢复原来的序列,然后维护个max即可class Solution {public: int largestAltitude(vector<int>& gain) { int ma=0,now=0; for(auto &x:gain){ now+=x; ma=max(ma,now); } return ma; }};
2021-01-24 17:07:25 149 1
原创 C++ 构造函数
1、默认构造函数以及构造函数的重载默认构造函数,即创建对象时,会自动执行的函数。如果不写的话也是可以的,编译器在执行时候发现类中没写构造函数,会自动给类中加上一个无参的构造函数,即默认构造函数。但如果你自己编写了构造函数的重载,编译器识别到了存在构造函数,那么空参的构造函数就不会自动给你加上去, 所以建议手动写上默认构造函数。#include<bits/stdc++.h>using namespace std;class A{ //类的外部接口 public:
2021-01-24 16:42:30 426
原创 2020上海ICPC B.Mine Sweeper II
思路:考虑一个二元关系(点,雷),要想到我们把整张图取反后,这个二元关系的个数是不变的想到这点这题其实就已经过了。我们计算一下图A和图B两张图不同的个数有多少个,如果少于一半,那么B可以变成A,所以输出A即可。如果大于一半呢?我们知道取反后二元组个数是不变的。所以我们对A进行取反,这样子,现在不同的个数就是没取反时候相同的个数,是小于一半的,并且满足要求,因此只需要输出A的补图即可。#include<bits/stdc++.h>using namespace std;char s[
2021-01-15 22:49:15 110
原创 2020济南ICPC D.Fight against involution
题意:给了n个人,每个人的写的单词个数在一个区间,最开始每个人都选择区间最右端点为自己写的单词个数,每个人的得分为n - 写的单词数大于他的人数现在让你给每个人选择写的单词数,要求得分不低于他们自己选的。思路:以右端点为第一优先级,左端点为第二优先级,从小到大排序。对于右端点一样的,我们让他们的选择都一样,并且左端点尽量小,但是要大于等于上一个人的分数这里要注意是可以取等号的因为排名与写的单词数大于他的有关,所以可以取到一样,这样每个人的得分都不低于自己的最开始希望。#include<bit
2021-01-07 22:51:25 262
原创 2020济南ICPC G.Xor Transformation
题意:给了一个X和Y,让每次选择一个A(0<=A<X)与X异或,让构造不超过5步使X变成Y,注意X异或后会变化思路:利用异或的性质 一个异或自己等于0所以考虑X ^ X ^ Y =Y令Z = X ^ Y如果Z<X 直接一步到位否则,先X = X ^ Y X变成了Z(Z>X) 然后X ^ Y=Y#include<bits/stdc++.h>using namespace std;#define int long long signed main(){
2021-01-07 01:13:23 226
原创 leetcode 第222场周赛 题解
卡车上的最大单元数思路:贪心按照能装载的单元数量从大到小排直接选即可class Solution {public: int maximumUnits(vector<vector<int>>& b, int t) { sort(b.begin(),b.end(),[](vector<int> a,vector<int> b){ return a[1]>b[1];
2021-01-03 22:18:05 105
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人