<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Cainell的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Cainell</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Cainell]]></copyright><item><title><![CDATA[通过实际项目锻炼代码工程能力]]></title><link>https://blog.youkuaiyun.com/Cainell/article/details/148509898</link><guid>https://blog.youkuaiyun.com/Cainell/article/details/148509898</guid><author>Cainell</author><pubDate>Sun, 08 Jun 2025 10:11:07 +0800</pubDate><description><![CDATA[记住：工程能力的核心不在于写了多少代码，而在于你写的代码能否经得起时间考验，能否在团队协作中高效发挥作用。✅ 能否在1小时内让新成员运行起项目。✅ 是否所有环境配置都可自动化。✅ 关键流程是否有文档说明。✅ 错误处理是否完备。]]></description><category></category></item><item><title><![CDATA[MathType集成到PowerPoint 笔记]]></title><link>https://blog.youkuaiyun.com/Cainell/article/details/139086361</link><guid>https://blog.youkuaiyun.com/Cainell/article/details/139086361</guid><author>Cainell</author><pubDate>Tue, 21 May 2024 10:40:31 +0800</pubDate><description><![CDATA[下载MathType破解版（正版只有30天试用期）
找到后缀为AddIn的文件

将其复制进

后续就参考 [MathType for Word and PPT] (https://zhuanlan.zhihu.com/p/60475447) 这篇文章


]]></description><category></category></item><item><title><![CDATA[【无标题】]]></title><link>https://blog.youkuaiyun.com/Cainell/article/details/127819833</link><guid>https://blog.youkuaiyun.com/Cainell/article/details/127819833</guid><author>Cainell</author><pubDate>Sat, 12 Nov 2022 14:13:57 +0800</pubDate><description><![CDATA[没啥]]></description><category></category></item><item><title><![CDATA[2021PAT春季赛 试做]]></title><link>https://blog.youkuaiyun.com/Cainell/article/details/123290236</link><guid>https://blog.youkuaiyun.com/Cainell/article/details/123290236</guid><author>Cainell</author><pubDate>Sun, 06 Mar 2022 10:32:31 +0800</pubDate><description><![CDATA[题1
题意：求在给定上界范围内，公差最大的且都为素数的，等差数列。

#include&lt;bits/stdc++.h&gt;
using namespace std;
const int N = 1e5+10;

int n, m;
bool isPrime[N];
vector&lt;int&gt; primes, ans;

bool is_prime(int x){
    if(x&lt;2){
        return false;
    }
    for(int i = 2;i&lt]]></description><category></category></item><item><title><![CDATA[PAT 2021年秋季 试做]]></title><link>https://blog.youkuaiyun.com/Cainell/article/details/123278400</link><guid>https://blog.youkuaiyun.com/Cainell/article/details/123278400</guid><author>Cainell</author><pubDate>Sat, 05 Mar 2022 08:36:13 +0800</pubDate><description><![CDATA[C++ code
#include&lt;bits/stdc++.h&gt;
using namespace std;
struct Array{
	int beg, length;
}; 

vector&lt;Array&gt; vec;
int last = 1;
int main(){
	int n, k;
	cin&gt;&gt;n&gt;&gt;k;
	for(int i = 0;i&lt;n;++i){
		int a]]></description><category></category></item><item><title><![CDATA[PAT 算法笔记P271 DFS 不可分割背包问题 P273 DFS 选择K个数]]></title><link>https://blog.youkuaiyun.com/Cainell/article/details/122930119</link><guid>https://blog.youkuaiyun.com/Cainell/article/details/122930119</guid><author>Cainell</author><pubDate>Mon, 14 Feb 2022 18:42:49 +0800</pubDate><description><![CDATA[P271 DFS 不可分割背包问题
题目描述：
有n件物品，每件物品的重量为w[i], 价值为c[i]。现在需要选出若干件物品放入一个容量为v的背包中，使得在选入背包的物品重量和不超过容量v的前提下，让背包中物品的价格之和最大，求最大价值。
示例：
输入：
5 8 //5件物品，背包容量为8
3 5 1 2 2  //物品重量
4 5 2 1 3 //物品价值
 
输出：10

code
/*算法笔记P272 不可分割背包问题
 *
 */
#include &lt;vector&gt;
#include ]]></description><category></category></item><item><title><![CDATA[HDU - 2527 (哈夫曼树 + 优先队列)]]></title><link>https://blog.youkuaiyun.com/Cainell/article/details/122902442</link><guid>https://blog.youkuaiyun.com/Cainell/article/details/122902442</guid><author>Cainell</author><pubDate>Sat, 12 Feb 2022 21:46:27 +0800</pubDate><description><![CDATA[问题描述：
哈夫曼编码(Huffman Coding)；一个字母的权值等于该字母在字符串中出现的频率。所以Javac++ 想让你帮忙，给你安全数值和一串字符串，并让你判断这个字符串是否是安全的？
Input：
输入有多组case，首先是一个数字n表示有n组数据，然后每一组数据是有一个数值m(integer)，和一串字符串没有空格只有包含小写字母组成！
Input：
如果字符串的编码值小于等于给定的值则输出yes，否则输出no。
SampleInput：
2
12
helloworld
66
ithinkyo]]></description><category></category></item><item><title><![CDATA[常用四大二分法查找变形]]></title><link>https://blog.youkuaiyun.com/Cainell/article/details/122485622</link><guid>https://blog.youkuaiyun.com/Cainell/article/details/122485622</guid><author>Cainell</author><pubDate>Fri, 14 Jan 2022 13:45:37 +0800</pubDate><description><![CDATA[常用二分法查找变形二分法新的改变功能快捷键合理的创建标题，有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能，丰富你的文章UML 图表FLowchart流程图导出与导入导出导入
二分法
二分法
你好！ 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章，]]></description><category></category></item><item><title><![CDATA[天勤 数据结构 P80 T10]]></title><link>https://blog.youkuaiyun.com/Cainell/article/details/119703046</link><guid>https://blog.youkuaiyun.com/Cainell/article/details/119703046</guid><author>Cainell</author><pubDate>Sat, 14 Aug 2021 16:46:54 +0800</pubDate><description><![CDATA[题目
试编写一个算法，检查一个程序中的花括号、方括号和圆括号是否配对，若全部配对，则返回1，否则返回0。对于程序中出现的一对单引号或者双引号内的字符不进行括号配对检查。39为单引号ASCII值，34为双引号的ASCII值。单引号和双引号如果出现则成对出现。
int bracketsCheck(char f[]){// 对由字符数组f所存字符中的文本进行括号匹配检查 
		stack S, char ch;
		char *p = f;
		
		while(*p!='\0'){// 顺序扫描串中的每一个字符]]></description><category></category></item><item><title><![CDATA[十进制转二进制 （栈]]></title><link>https://blog.youkuaiyun.com/Cainell/article/details/119685964</link><guid>https://blog.youkuaiyun.com/Cainell/article/details/119685964</guid><author>Cainell</author><pubDate>Fri, 13 Aug 2021 23:54:04 +0800</pubDate><description><![CDATA[C++ Code
class Solution {
public:
    string toHex(int num) {
        if(num==0) return "0";
        
        //0-15映射成字符
        string num2char = "0123456789abcdef";

        //转化为非符号数,就可以用&gt;&gt;移位
        unsigned int n = num;

        string res = ""]]></description><category></category></item><item><title><![CDATA[2021-07-17 算法笔记 二分法 分割木棒|凸多边形]]></title><link>https://blog.youkuaiyun.com/Cainell/article/details/118860872</link><guid>https://blog.youkuaiyun.com/Cainell/article/details/118860872</guid><author>Cainell</author><pubDate>Sun, 18 Jul 2021 23:36:27 +0800</pubDate><description><![CDATA[问题1：分割木棒

算法
二分法
Code

问题2：凸多边形


#include&lt;cstdio&gt;
#include&lt;cmath&gt;
const double PI = acos(-1.0);
const double eps = 1e-5; //比较精度

//求圆心角之和
double totalCornerAngles(double edges[],int n,doule r){
  double sum = 0.0;
  for(int i = 0;i&lt;n;++i){
]]></description><category></category></item><item><title><![CDATA[全排列 《算法笔记》P117]]></title><link>https://blog.youkuaiyun.com/Cainell/article/details/117658899</link><guid>https://blog.youkuaiyun.com/Cainell/article/details/117658899</guid><author>Cainell</author><pubDate>Mon, 07 Jun 2021 13:39:45 +0800</pubDate><description><![CDATA[#include&lt;cstdio&gt;
const int maxn = 11;
//P为当前排列，hashTable记录整数x是否已经在P中
int n,P[maxn],hashTable[maxn] = {false};

//当前处理排列的第index号位
void generateP(int index){
	if(index == n+1){//递归边界，已经处理完排列的1-n位 
		for(int i=1;i&lt;=n;++i){
			printf("%d",P[i]); //输出.]]></description><category></category></item><item><title><![CDATA[leetcode 2021.6.2 每日一题523. 连续的子数组和]]></title><link>https://blog.youkuaiyun.com/Cainell/article/details/117477874</link><guid>https://blog.youkuaiyun.com/Cainell/article/details/117477874</guid><author>Cainell</author><pubDate>Thu, 03 Jun 2021 11:40:02 +0800</pubDate><description><![CDATA[523. 连续的子数组和

参考题解



弄一个变量r = 0来寄存累加和的余数：把数组里的每个数依次加到r上，然后每加一个就当场取个模，根据刚才的规律，多取几次模不影响累加和的余数。
]]></description><category></category></item><item><title><![CDATA[2021-05-21 1035. Uncrossed Lines (dp,动态规划）]]></title><link>https://blog.youkuaiyun.com/Cainell/article/details/117411778</link><guid>https://blog.youkuaiyun.com/Cainell/article/details/117411778</guid><author>Cainell</author><pubDate>Mon, 31 May 2021 12:07:41 +0800</pubDate><description><![CDATA[关键词：转为公共子序列

1035. 不相交的线

参考题解：动态规划，转化为最长公共子序列。典型的二维动态规划问题。

为了统一方便，数组从0开始一直到n+1.

状态转移方程：




class Solution {
public:
    int maxUncrossedLines(vector&lt;int&gt;&amp; A, vector&lt;int&gt;&amp; B) {
        vector&lt;vector&lt;int&gt;&gt; dp(A.size()+1,ve]]></description><category></category></item><item><title><![CDATA[leetcode 每日一题 5.19 1738. 找出第 K 大的异或坐标值（二维异或） 215. 数组中的第K个最大元素（kth-element)]]></title><link>https://blog.youkuaiyun.com/Cainell/article/details/117134203</link><guid>https://blog.youkuaiyun.com/Cainell/article/details/117134203</guid><author>Cainell</author><pubDate>Mon, 24 May 2021 21:32:25 +0800</pubDate><description><![CDATA[1738. 找出第 K 大的异或坐标值

解法参考

1.前置异或

2.kth-element问题：手撸快排；手撸堆排序；sort排序或者优先队列。

前置题215. 数组中的第K个最大元素


/*堆排序
*/
class Solution {
public:
    //i：从0开始，标号值要加1
    void maxHeapify(vector&lt;int&gt;&amp; a,int i,int heapsize){
        //l:右子节点，r:l的右边的一个节点
    ...]]></description><category></category></item><item><title><![CDATA[leetcode 字典树 每日一题 2021.5.16 208. 实现 Trie (前缀树)（字典树）]]></title><link>https://blog.youkuaiyun.com/Cainell/article/details/117076737</link><guid>https://blog.youkuaiyun.com/Cainell/article/details/117076737</guid><author>Cainell</author><pubDate>Fri, 21 May 2021 10:49:39 +0800</pubDate><description><![CDATA[前置题目

208. 实现 Trie (前缀树)

前缀树的介绍：参考

代码实现：

C++


class Trie {
private:
    bool isEnd;
    Trie* next[26];
public:
    /** Initialize your data structure here. */
    Trie() {
        isEnd = false;
        memset(next,0,sizeof(next));
    }
    
    /** ]]></description><category></category></item><item><title><![CDATA[leetcode 每日一题 2021.5.5 740. 删除并获得点数]]></title><link>https://blog.youkuaiyun.com/Cainell/article/details/116481405</link><guid>https://blog.youkuaiyun.com/Cainell/article/details/116481405</guid><author>Cainell</author><pubDate>Fri, 07 May 2021 15:19:52 +0800</pubDate><description><![CDATA[前置题目

198. 打家劫舍

方法：

如果房屋数量大于两间，应该如何计算能够偷窃到的最高总金额呢？对于第 k(k&gt;2) 间房屋，有两个选项：

偷窃第 k间房屋，那么就不能偷窃第 k-1间房屋，偷窃总金额为前 k−2 间房屋的最高总金额与第 k间房屋的金额之和。
	不偷窃第 k 间房屋，偷窃总金额为前 k-1间房屋的最高总金额。
因此推出状态转移方程：



Code


class Solution {
public:
    int rob(vector&lt;int&gt;&a...]]></description><category></category></item><item><title><![CDATA[leetcode 第239场周赛]]></title><link>https://blog.youkuaiyun.com/Cainell/article/details/116353924</link><guid>https://blog.youkuaiyun.com/Cainell/article/details/116353924</guid><author>Cainell</author><pubDate>Sun, 02 May 2021 15:23:43 +0800</pubDate><description><![CDATA[5746. 到目标元素的最小距离

张晴川的代码模板


#pragma comment(linker, "/stack:200000000")
#pragma GCC optimize("Ofast")
//#pragma GCC optimize(3)
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC target("sse3","sse2","sse")
//#pr]]></description><category></category></item><item><title><![CDATA[Leetocde　数组题 39. 组合总和 （回溯，剪枝）]]></title><link>https://blog.youkuaiyun.com/Cainell/article/details/116324977</link><guid>https://blog.youkuaiyun.com/Cainell/article/details/116324977</guid><author>Cainell</author><pubDate>Sat, 01 May 2021 10:20:44 +0800</pubDate><description><![CDATA[39. 组合总和

medium

方法一：

回溯（不剪枝）


class Solution {
public:
    void dfs(vector&lt;int&gt;&amp; candidates,int target,vector&lt;vector&lt;int&gt;&gt;&amp; ans,vector&lt;int&gt;&amp; combine,int idx){
        if(idx==candidates.size()){
            return;
 ]]></description><category></category></item><item><title><![CDATA[leetcode 31 next permutation]]></title><link>https://blog.youkuaiyun.com/Cainell/article/details/116175065</link><guid>https://blog.youkuaiyun.com/Cainell/article/details/116175065</guid><author>Cainell</author><pubDate>Mon, 26 Apr 2021 22:10:51 +0800</pubDate><description><![CDATA[31. Next Permutation

解法总结：

1.从后往前找到第一个破坏单调递增性质的位置(x,y)

2.将array[x]与array[y,n)中比array[x]大的最小的数字交换（注意是靠后的）

3.将array[y,n)反过来

4.别忘了特殊处理整个array本身就是单调递减的情况

Code


class Solution {
public:
    void nextPermutation(vector&lt;int&gt;&amp; nums) {
        int ]]></description><category></category></item></channel></rss>