自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 牛牛的回文串

题目链接牛牛的回文串#include<bits/stdc++.h>using namespace std;#define ll long long/* 解决一个回文串可以发现,添加一个字符和删除一个字符是等价的,删除一个字符相当于在另一侧添加一个字符,所以只需要计算删除一个字符 所需要的的代价即可,删除一个字符可以用过 1. 先将该字符change成另一个字符再删除 2. 添加任意一个字符再修改成该字符相当于添加 3. 将该字符替换成另一个字符c在通过添加另一个字符 4.

2020-12-25 15:47:26 210

原创 Min25筛详解

Min25筛详解min25筛有什么用?目的: 求出∑i−1Nf(i)\sum_{i-1}^Nf(i)∑i−1N​f(i)的前缀和,其中前置条件为f(i)f(i)f(i) 当i为素数时,能够用iki^kik表达,例如f(i)=i1+i2+i3f(i)=i^1+i^2+i^3f(i)=i1+i2+i3等形式,常见的有ϕμ\phi \quad \muϕμ函数。f(i)f(i)f(i)是积性函数怎么求?分两步走处理素数处理合数处理素数素数部分∑i=1N[i∈prime]f(i)

2020-11-25 21:42:21 1792 1

原创 2020CCPC长春站

2020CCPC长春站比赛过程一来我们分开看题,从前到后,从后到前,然后我看中间的D题。一看感觉可以做,先上去打了个表,然后发现规律了,这时候队友说A题是签到题可以写,然后我就让出了电脑,然后我把D题跟队友说一下后修正思路确认了,然后等A题过了我就上去写D题,最后F题队友说启发式暴力合并可以过,但是需要维护一个集合的异或和,最后想到只要按位拆分01的个数维护起来就可以了,然后两个半小时得时候就过了,最后还刻了JKL三道题,最后三个人决定一起写K,然后一开始思路绕进去了,最后队友说一开始的思路是错的,这

2020-11-09 16:14:10 873

原创 LeetCode第192场周赛

重新排列数组思路代码实现每次push进入答案i和i+n个然后直接返回class Solution {public: vector<int> shuffle(vector<int>& nums, int n) { vector<int>res; for(int i=0;i<n;i++){ res.push_back(nums[i]); res.push_back(

2020-06-07 12:42:25 119

原创 点分治+FFT-CodeChef-PRIMEDST

题目链接CodeChef-PRIMEDST思路采用点分治统计所有的路径,但是如果是朴素的路径相乘复杂度是O(n^2),所以采用FFT加速多项式乘法达到(nlogn)的复杂度,总体复杂度就是(nlognlogn)的复杂度。做题步骤:点分治处理统计当前子树的路径进行FFT累加路径,放进桶里重复重心的所有子树重复2,3,4步骤清空桶,继续点分治统计答案代码实现#include<bits/stdc++.h>using namespace std;#define ll l

2020-05-29 11:19:45 198

原创 点分治-luogu4149

题目链接luogu4149思路点分治的裸题,每次计算距离的时候带入一个深度,开一个judge数组开记录距离为k的最小步数时多少,每次更新即可,具体看代码。代码实现#include<bits/stdc++.h>using namespace std;#define ll long longconst int N = 2e5+10;int head[N],tot;int maxp[N],siz[N],tmp[N*10],cnt,d[N];int sum,rt;bool vis

2020-05-28 14:43:10 84

原创 点分治-luogu2664

思路这题是个很好的点分治题目。首先明确我们的目的,既然使用了点分治,那么就需要O(n)的时间内处理出重心rt以及“rt的儿子”的答案。考虑重心的一个子树的根节点,如果这个点v的颜色是第一次出现,那么它对其他不在该子树的点的答案的贡献(包括rt)就是size[v]然后我们再考虑这个子树,注意刚刚我们考虑的是子树的根节点,现在考虑的是整个子树对其他“rt儿子”的贡献。假设该子树的根节点是v,从v~rt上有num种颜色,那么对其他节点的贡献就是num*(size[rt]-size[v])整体的步骤:

2020-05-28 14:42:47 96

原创 点分治-luogu3806

题目链接luogu3806思路这题是点分治的模板题目,点分治就是一棵树上的分治。详细的教程上B站看AgOH的直播,很感谢大佬的分享点分治教程-作者:AgOH代码实现#include<bits/stdc++.h>using namespace std;#define ll long longconst int N = 1e4+10;const int NN = 1e7+10;struct edge{ int v,dis,nex;}edges[N<<1]

2020-05-28 14:41:57 125

原创 点分治-luogu2634

题目链接luogu2634思路经典的点分治算法,点分治是logn层,考虑O(n)处理路径问题,核心代码是下面这部分int calc(int u,int v){ dis[u]=v%3; tmp[0]=tmp[1]=tmp[2]=0; getdis(u,0); return tmp[1]*tmp[2]*2+tmp[0]*tmp[0];}void divide(int u){ //先统计所有答案 ans+=calc(u,0); vis[u]=1

2020-05-28 14:41:20 101

原创 点分治-CF161D

题目链接CF161D-luogu思路套用点分治的思想先处理出每个节点的距离记录桶中的个数更新答案更新桶下一轮分治清空桶代码实现#include<bits/stdc++.h>using namespace std;#define ll long longconst int N = 5e4+10;int head[N],tot;int maxp[N],siz[N],rt,sum,dis[N],cnt;int tmp[N],rec[N],ans,n,k;bool

2020-05-28 14:40:28 160

原创 287. 寻找重复数-快慢指针

287. 寻找重复数思路快慢指针一个图,快指针跑两步,满指针跑一步,如果遇到相同的节点肯定有环。有环如何找到起点?把慢指针放到开头,快指针也降速,一步一步跑,再次遇到相同的就是答案。证明如下x 是环的起点y 是相遇点L是环长度c是环长度减去y得到2(x+y)=x+y+kL2(x+y)=x+y+kL2(x+y)=x+y+kLx=(k−1)L+(L−y)=(k−1)L+cx=(k-1)L + (L-y)=(k-1)L+cx=(k−1)L+(L−y)=(k−1)L+c所以我们把sl

2020-05-26 11:41:55 146 1

原创 146. LRU缓存机制

146. LRU缓存机制思路考虑使用双向链表+哈希,插入和更新直接移动到头结点即可struct DoubleLink { int key, value; DoubleLink* prev; DoubleLink* next; DoubleLink(): key(0), value(0), prev(nullptr), next(nullptr) {} DoubleLink(int _key, int _value): key(_key), value(_valu

2020-05-25 17:22:09 74

原创 105. 从前序与中序遍历序列构造二叉树

思路考虑使用辅助栈,做到O(n)的复杂度/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode*

2020-05-22 12:20:58 80

原创 UVA - 10325

题解: 根据容斥定理,Ans = 0个数能被整除-1个数能被整除+任意两个数的积能被整除的个数-任意三个数的积能被整除的个数+ ··· +然后m只有15,考虑暴力遍历m的所有情况,根据奇偶判断加减即可#include<bits/stdc++.h>using namespace std;#define ll long long/* * 题解: 根据容斥定理, * Ans = 0个数能被整除-1个数能被整除+任意两个数的积能被整除的个数-任意三个数的积能被整除的个数+ ··· +

2020-05-22 01:13:47 118

原创 1371. 每个元音包含偶数次的最长子字符串

思路就是用5位数字存放a,e,i,o,u状态00000~11111,然后每次遇到a,e,i,o,u就分别修改一下状态,两个位置状态相同的时候,这两个位置的差就是答案。class Solution {public: int findTheLongestSubstring(string s) { int ans = 0,statu = 0,n=s.size(); vector<int>pos(1<<5,-1); pos[0]=

2020-05-20 01:16:45 72

原创 leetcode-680. 验证回文字符串 Ⅱ

思路因为只能删除一个,所以采用双指针,找到第一个不一样的地方,然后考虑删除左边还是右边即可class Solution {public: bool validPalindrome(string s) { if(s.size()==1)return 1; int l=0,r=s.size()-1; while(l<=r){ if(s[l]!=s[r]){ int ll = l++;

2020-05-19 11:32:47 110

原创 LeetCode每日一题20200518

乘积最大子数组乘积最大子数组思路考虑使用DP,设DP[i]为前i个的最大乘积,很容易的到转移方程dp[i]=max(dp[i−1]∗nums[i],ai)dp[i]=max(dp[i-1]*nums[i],a_i)dp[i]=max(dp[i−1]∗nums[i],ai​)但是显然,这样是不对的,因为会出现负数的情况[5,2,-3,4-3]这样,dp[4]的状态实际是[52]但是dp[5]需要从[52*-3*4]转移来,所以我们需要一个辅助的DP数组,minF[i]表示前i个的最小值,然后得到的

2020-05-18 11:16:25 129

原创 十七届同济大学程序设计预选赛-J

题目链接十七届同济大学程序设计预选赛-J思路我们从这个开始考虑Fk′(n)=∑i=1n(n−i)kFib(i)Fk′(n+1)=∑i=1n(n−i+1)kFib(i)\begin{aligned}F'_k(n)&=\sum_{i=1}^n(n-i)^kFib(i)\\F'_k(n+1)&=\sum_{i=1}^n(n-i+1)^kFib(i)\\\end{aligned}Fk′​(n)Fk′​(n+1)​=i=1∑n​(n−i)kFib(i)=i=1∑n​(n−i+1)kFib

2020-05-11 13:19:13 97

原创 使用Clion打ACM以及自动add_executable

cmake_minimum_required(VERSION 3.16)project(Clioncode)set(CMAKE_CXX_STANDARD 14)file (GLOB files *.cpp */*.cpp)foreach (file ${files}) string(REGEX REPLACE ".+/(.+)/(.+)\\..*" "\\1-\\2" exe $...

2020-05-02 11:46:38 1141

原创 gym-102392E

题目链接gym-102392C思路首先按照年龄把这些人排好序。读题后发现答案为carpc+mpm+t*(需要变化的年龄),显然我们枚举车的数量后就可以知道m的大小,然后再求出最小的变化年龄就可以了。处理四个数组long long mned[N],msum[N],cned[N],csum[N];/*mned表示前i个全都乘坐单车需要多少变化的年龄msum表示前i个全都乘坐单车多出多少...

2020-04-28 17:08:44 237

原创 每日一题-NC17137-DP

题目链接NC17137思路DP状态定义为dp[i][j]表示前i个数删除j个后的答案。那么很容易得到递推方程dp[i][j]=dp[i-1][j-1]+dp[i-1][j];就是删除当前这个和不删除当前这个的情况,然后如果是 1 2 3 5 6 7 8 5 m=4的话,就会出现删除5 6 7 8 和删除6 7 8 5的情况重复的情况,我们需要减去重复的这部分,观察到重复的这部分需要把6...

2020-04-27 22:01:26 148

原创 Educational Codeforces Round 86 [Rated for Div. 2]

题目链接‘Educational Codeforces Round 86 [Rated for Div. 2]’A思路水题,分三种情况就可以了代码实现#include<bits/stdc++.h>using namespace std;#define ll long long#define ld long double#define vi vector<int...

2020-04-27 20:11:50 132 1

原创 Gym-102392B

题目链接Gym-102392B思路对于每个任务要么选择level 1要么level 2或者不选,不选的话就会由上上个状态转移到,我们定义DP状态为dp[i][j]表示前n个物品中第一阶段经验为i,第二阶段经验为j的最小分钟数,需要给任务排序,因为会有溢出,防止出现{90,30,30,30}而应该选取{30,30,30,90}的情况。而第一阶段存在溢出的情况,所以只有在i < s1的时候...

2020-04-26 09:08:00 324

原创 luogu-P2863-tarjan

题目链接luogu-P2863-tarjan题解tarjan板子题目,思路就是用栈和DFS序的性质求出强联通分量。代码实现#include<cstdio>#include<algorithm>#include<string.h>using namespace std;const int N = 1e5+10;struct node{ int...

2020-04-15 12:45:30 94

原创 easypo导入excel

导出exceldemoSmartlampDTOimport cn.afterturn.easypoi.excel.annotation.Excel;import lombok.Data;import lombok.EqualsAndHashCode;import java.io.Serializable;import java.util.Date;@Data@EqualsA...

2020-04-12 22:01:53 811

原创 Yokohama 2018

题目链接Yokohama 2018C - Emergency Evacuation思路先计算出每个人到出口的时间,肯定会有同步的,例如下列情况10s 1015s 10就是10s 的时候有10个人到达出口,15s的时候有10个人到达出口,就需要排队,10s+10s+10s=30s可以全部走完,模拟一下上述过程,算出来就是答案。坑点就是数据很小,在误导你暴力QaQ代码实现#inc...

2020-04-11 21:43:49 143

原创 Educational Codeforces Round 85

题目连接Educational Codeforces Round 85赛后20分钟A题被hacked了,我没得心态了A思路就是根据题意来,一共有四种情况(写的时候少了一种,竟然还给过了,于是就被hacked),判断一下就可以了代码实现#include<bits/stdc++.h>using namespace std;#define ll long longcons...

2020-04-11 01:59:01 94

原创 Educational Codeforces Round 59

题目连接Educational Codeforces Round 59A思路直接拆成2部分,第一部分一个数,第二个部分n个数,考虑相等的情况输入NO,其他为YES代码实现#include<bits/stdc++.h>using namespace std;#define ll long longstring s;int main(){ int q; scanf(...

2020-04-10 16:33:01 95

原创 Codeforces Round #632 (Div. 2)

题目链接Codeforces Round #632 (Div. 2)当时被C题卡了很久,最后20分钟把D的思路想好了却想不到把答案输出的方法,还是思维转变不够快的原因A思路构造题,发现只要构造出wbbw这种[2,2]的形状就可以了代码实现#include<bits/stdc++.h>using namespace std;#define ll long lo...

2020-04-09 17:32:13 100 3

原创 Kattis bitwise-思维

题目链接Kattis bitwise思路这道题就是求循环序列的分成k部分的和的最大值,我们考虑从高位到低位,如果高位可行就加入答案,然后把答案带入下一个需要验证的位中进行一起验证即可,因为是循环2n的序列,只要能分成2k-1分即可,因为中间有一份可能会连接起来使得总的部分少一份。代码实现#include<bits/stdc++.h>using namespace std;...

2020-04-08 21:08:40 177

原创 Poj 3046

题目连接POJ思路dp[i][j]表示前i个不同的数,所组成的长度为j的方案数目显然可以得到一个状态转移dp[i][j]=∑k=0min(j,num[i])dp[i−1][j−k]dp[i][j]=\sum_{k=0}^{min(j,num[i])}dp[i-1][j-k]dp[i][j]=k=0∑min(j,num[i])​dp[i−1][j−k]但是这样算的话复杂度是O(nm^2...

2020-04-05 14:08:43 128

原创 HDU 6578

题目链接HDU6578思路观察到n很小,然后只有4个数字所以我们考虑用DP,来写,状态为dp[i][j][k][l]即把{0,1,2,3}最后出现的位置排序后就是i,j,k,l,例如[0,0,1,1,2,3,1]对应的状态就是dp[2][5][6][1],然后考虑t+1个数出现的转移方程我们可以得到dp[i][k][m-1][m]+=dp[i][j][k][m-1]dp[i][j][m...

2020-04-04 17:28:04 271

原创 Codeforces Round #631 (Div. 2)-D

思路首先要明白b数组,其实就是a数组的异或前缀和,那么要怎么保证异或递增?选的数拆成二进制之后肯定需要位数递增才行,所以我们考虑把d拆成2进制,分成很多块儿,就是这样[1],[10,11],[100,101,110,111],[1000,…],…分成上面这样的块,然后从这里面找序列就可以了,然后发现这些块的大小是1 2 4 8 16这样的,然后问题就变成了从x个块中分别取1,2,3,4,...

2020-04-04 02:22:11 145

原创 POJ 3450题解

题目连接POJ 3450 Corporate Identity思路先用后缀数组处理出height数组,然后我们二分最长公共子串的长度,然后再height中找大于这个长度并且不在一个字符串的个数,如果等于n则返回true否则返回false即可。前期一直TLE不知道为何,换了个板子就过了,也许是我的板子的问题。代码实现#include<cstdio>#include<i...

2020-04-03 20:57:55 173

原创 poj-2774-后缀数组

题目连接pojHeight数组在之前的博客中已经说了后缀数组的具体算法以及如何求出sa数组,但是求出sa之后我们需要学习如何运用sa数组。第一个运用当然就是height数组了,他表示的意思是height[i]表示第i小的后缀串与第i-1小的后缀串的最长公共前缀(如图)如果能够求出这个数组我们就能够在O(n)时间内求出最长公共子串了。观察上面那个图,我们发现height有一个规律...

2020-04-03 16:26:24 146

原创 coderforces-Round-630-Div-2-E

题目意思就是给一个矩阵的大小,以及一个区间lR,现在可以给相邻两个方格+1或者一个方格+2,你可以在矩阵上任意放lr的高度的方块,使得他们的高度相等,求放方块的方案数思路因为相邻两块可以放,所以可以推出任意两块我们是可以修改他们的奇偶性的,根据对称性可以很简单的写出来首先当nm%2==1的时候答案肯定是(R−L+1)nm(R-L+1)^nm(R−L+1)nm,因为肯定存在一个行或者列为奇数...

2020-04-03 16:11:52 114 1

原创 后缀数组详解-最详细无之一

后缀数组详解算法的目的首先,明确我们算法的目的输入=一个字符串str输出=一个关于str的后缀排序后的数组,如下图目的就是求出这个sa数组,使得sa[i]=j为第i小的后缀所在的位置前置知识倍增倍增就是每次走倍数次,后面状态的判断可以使用前面判断出的信息来更新,具体的详情百度学习,这里涉及后缀数组的我就给出一张图生动一点就是因为都是在同一个字符串上操作,我们需要充分利用我...

2020-04-02 17:31:50 493

原创 AC自动机

巨巨博客连接Wiki-AC自动机B站视频详解不知道B站视频会不会变换地址,搜"UESTCACM 每周算法讲堂 AC自动机"就有了因为学过形式语言与自动机,把书上的每个店看成一个状态,每个fail指针看成一个转移函数就可以了代码实现#include<bits/stdc++.h>using namespace std;#define ll long long #defin...

2020-04-02 00:08:03 54

原创 C语言ODBC连接mysql

配置mysql8.7 vs2019首先我们需要在vs中导入mysql的包lib和include,点击解决方案->属性然后在VC++目录和包目录中导入mysql目录下的lib和include,然后再把lib.dll放到项目文件下。然后就可以进行连接了,需要注意的坑点就是在向数据库写入中文的时候需要设置字符集为gbkif (!mysql_set_character_set(&my...

2020-04-02 00:06:18 543

原创 gym-102055-RSA加密-欧拉降幂

题目链接gym102055思路首先要明白一个模运算的性质(a ^ b) % p = ((a % p)^b) % p令e=230+3,r=(q−1)(p−1)令e=2^{30}+3,r=(q-1)(p-1)令e=230+3,r=(q−1)(p−1),找到e在模n下的逆元d,de=1(mod n)找到e在模n下的逆元d,de=1(mod\ n)找到e在模n下的逆元d,de=1(mo...

2020-04-02 00:05:01 203

空空如也

空空如也

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

TA关注的人

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