<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[peng_fighting的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/peng_fighting</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; peng_fighting]]></copyright><item><title><![CDATA[Matlab模拟光粒攻击前后的三体运动]]></title><link>https://blog.youkuaiyun.com/peng_fighting/article/details/119875831</link><guid>https://blog.youkuaiyun.com/peng_fighting/article/details/119875831</guid><author>peng_fighting</author><pubDate>Mon, 23 Aug 2021 19:29:34 +0800</pubDate><description><![CDATA[数模国赛将至，但是我的matlab水平依旧很烂，三体倒是全都看完了。我于是想到：对三体中感兴趣的情节（光粒攻击前后的三体运动）建模，然后用matlab实现出来，我不就既可以练习建模，又可以满足我贪玩的心嘛！于是说干就干！！

模型的原理很简单：牛顿定理和万有引力公式，然后使用二阶差分的数学建模方法进行数值求解。

模拟光粒攻击：相当于将被攻击对象的质量减为0。对外部无作用力。

需要特判的情况是：当两个球体相距很近时，需要将两个球体合二为一。

代码如下：


% 按A键清理红色星
% 按G键清理绿色星
%]]></description><category></category></item><item><title><![CDATA[模拟硬件计算二进制除法]]></title><link>https://blog.youkuaiyun.com/peng_fighting/article/details/115914754</link><guid>https://blog.youkuaiyun.com/peng_fighting/article/details/115914754</guid><author>peng_fighting</author><pubDate>Tue, 20 Apr 2021 17:55:06 +0800</pubDate><description><![CDATA[java代码：
import java.util.Scanner;

public class Divide {
	final static int size=32;//size位二进制数除法
	static long upper=(long) Math.pow(2, size-1)-1;
	static long lower=(long) Math.pow(2, size-1)*(-1);
	static long fullone=(long) Math.pow(2, 2*size)-1;

	publi]]></description><category></category></item><item><title><![CDATA[汉诺塔递归、非递归实现——递归与栈模拟递归的理解]]></title><link>https://blog.youkuaiyun.com/peng_fighting/article/details/115481662</link><guid>https://blog.youkuaiyun.com/peng_fighting/article/details/115481662</guid><author>peng_fighting</author><pubDate>Wed, 07 Apr 2021 12:06:08 +0800</pubDate><description><![CDATA[大一学习递归总是想要弄明白递归程序具体的运行步骤，但无奈一次次“迷失”在递归的迷宫中。。。
递归的精妙之处不在于它能用少量的代码来实现十分复杂的功能，而在于它能表达出“分形”结构。
在数学上的分形我就不展开说了，在编程上的分形简单来说，就是想像一个任务由许许多多工人完成，他们只会机械的做事，自己就是其中的一个最普通的工人，将自己要做的事用代码表达出来。
就汉诺塔来说，自己负责搬运第n块:

先让其他人将自己上面的n-1块从start柱，搬到mid柱，经过end柱。
自己将第n块从start柱，搬到end柱，]]></description><category></category></item><item><title><![CDATA[滑动窗口——单调队列]]></title><link>https://blog.youkuaiyun.com/peng_fighting/article/details/115345100</link><guid>https://blog.youkuaiyun.com/peng_fighting/article/details/115345100</guid><author>peng_fighting</author><pubDate>Wed, 31 Mar 2021 11:22:16 +0800</pubDate><description><![CDATA[滑动窗口
给定一个大小为 n≤106的数组。
有一个大小为 k的滑动窗口，它从数组的最左边移动到最右边。
你只能在窗口中看到 k个数字。
每次滑动窗口向右移动一个位置。
以下是一个例子：
该数组为 [1 3 -1 -3 5 3 6 7]，k为 3。
窗口位置 	         最小值 	 最大值
[1 3 -1] -3 5 3 6 7 	 -1 	3
1 [3 -1 -3] 5 3 6 7 	-3 	3
1 3 [-1 -3 5] 3 6 7 	-3 	5
1 3 -1 [-3 5 3] 6 7 	-3 ]]></description><category></category></item><item><title><![CDATA[最长上升子序列]]></title><link>https://blog.youkuaiyun.com/peng_fighting/article/details/115293822</link><guid>https://blog.youkuaiyun.com/peng_fighting/article/details/115293822</guid><author>peng_fighting</author><pubDate>Mon, 29 Mar 2021 10:17:13 +0800</pubDate><description><![CDATA[dp： O(n^2)
状态：
f[i]：i之前的序列中（包含i）以i结尾的最长上升子序列的长度。
状态转移：当前状态从前面所有状态中继承一个最优的合法状态。
合法状态：当前状态的数值大于所选状态的数值。
最优：长度最长。
状态转移方程：f[i]=max(f[j]) (0&lt;j&lt;i &amp;&amp; a[j]&lt;a[i])


贪心+二分
如何进一步优化呢？
如何使当前最长的上升子序列变长呢？
变长有两种办法：
1&gt; 在原本最长序列的末尾添加一个。
2&gt; 不断更新，原序列中的..]]></description><category></category></item><item><title><![CDATA[KMP初体验]]></title><link>https://blog.youkuaiyun.com/peng_fighting/article/details/115288244</link><guid>https://blog.youkuaiyun.com/peng_fighting/article/details/115288244</guid><author>peng_fighting</author><pubDate>Sun, 28 Mar 2021 22:17:14 +0800</pubDate><description><![CDATA[上课时听老师讲云里雾里，然后又被自己的思考被绕晕，最后按照算法设定画图（一定要将图画大，图太小容易画乱）才逐渐体会到KMP的精妙之处。将一些理解记录到了笔记本上：
理解：

KMP本质上是DP问题，通过将之前计算的结果记录下来，为之后的计算借鉴，从而减少时间复杂度。之后借鉴之前的过程可以用转移方程来表示。难点同精妙的点在于记录什么（next数组），如何借鉴（转移方程）。
i指向字符串s，j指向模式串p。
next[j]=k+1  的含义：
当p[j]与s[i]的字符不相同时，j应该指向p的哪个位置(也就是n]]></description><category></category></item><item><title><![CDATA[线性动态规划]]></title><link>https://blog.youkuaiyun.com/peng_fighting/article/details/114647541</link><guid>https://blog.youkuaiyun.com/peng_fighting/article/details/114647541</guid><author>peng_fighting</author><pubDate>Wed, 10 Mar 2021 21:48:17 +0800</pubDate><description><![CDATA[方格取数

  题目
  提交记录
  讨论
  题解
  视频讲解

设有 N×N 的方格图，我们在其中的某些方格中填入正整数，而其它的方格中则放入数字0。如下图所示：
2.gif
某人从图中的左上角 A 出发，可以向下行走，也可以向右行走，直到到达右下角的 B 点。
在走过的路上，他可以取走方格中的数（取走后的方格中将变为数字0）。
此人从 A 点到 B 点共走了两次，试找出两条这样的路径，使得取得的数字和为最大。
输入格式
第一行为一个整数N，表示 N×N 的方格图。
接下来的每行有三个整数，第一个.]]></description><category></category></item><item><title><![CDATA[打印学生选课清单——c语言实现]]></title><link>https://blog.youkuaiyun.com/peng_fighting/article/details/114405666</link><guid>https://blog.youkuaiyun.com/peng_fighting/article/details/114405666</guid><author>peng_fighting</author><pubDate>Fri, 05 Mar 2021 17:51:06 +0800</pubDate><description><![CDATA[3 打印学生选课清单 (40 分)
假设全校有最多40000名学生和最多2500门课程。现给出每门课的选课学生名单，要求输出每个前来查询的学生的选课清单。
输入格式:
输入的第一行是两个正整数：N（≤40000），为前来查询课表的学生总数；K（≤2500），为总课程数。此后顺序给出课程1到K的选课学生名单。格式为：对每一门课，首先在一行中输出课程编号（简单起见，课程从1到K编号）和选课学生总数（之间用空格分隔），之后在第二行给出学生名单，相邻两个学生名字用1个空格分隔。学生姓名由3个大写英文字母+1位数字组]]></description><category></category></item><item><title><![CDATA[(AcWing)1532. 找硬币 (哈希/双指针)]]></title><link>https://blog.youkuaiyun.com/peng_fighting/article/details/113037825</link><guid>https://blog.youkuaiyun.com/peng_fighting/article/details/113037825</guid><author>peng_fighting</author><pubDate>Sat, 23 Jan 2021 12:35:29 +0800</pubDate><description><![CDATA[(AcWing)1532. 找硬币
1&gt;用unordered_set实现哈希
//mathod 1：哈希表 O(n)
#include&lt;iostream&gt;
#include&lt;algorithm&gt;
#include&lt;unordered_set&gt;

using namespace std;

const int INF=10000;

int main()
{
	unordered_set&lt;int&gt; hash;
	int n,m;
	cin&gt;&gt;n]]></description><category></category></item><item><title><![CDATA[6-8 是否二叉搜索树 (25分)]]></title><link>https://blog.youkuaiyun.com/peng_fighting/article/details/111817004</link><guid>https://blog.youkuaiyun.com/peng_fighting/article/details/111817004</guid><author>peng_fighting</author><pubDate>Sun, 27 Dec 2020 16:14:54 +0800</pubDate><description><![CDATA[//这样是错误的，因为可能存在以下的情况
/*
            3
           /
          2
         /  \
        1    4
*/
// bool IsBST ( BinTree T )
// {
//     if(T)
//     {
//         if(T-&gt;Left&amp;&amp;T-&gt;Left-&gt;Data&gt;=T-&gt;Data)
//             return false;
//    .]]></description><category></category></item><item><title><![CDATA[素数线性筛]]></title><link>https://blog.youkuaiyun.com/peng_fighting/article/details/109681644</link><guid>https://blog.youkuaiyun.com/peng_fighting/article/details/109681644</guid><author>peng_fighting</author><pubDate>Fri, 13 Nov 2020 20:35:44 +0800</pubDate><description><![CDATA[沉心找各量的关联，把原理和过程弄明白，不然代码也是白写。
原理：
每个数被它的最小质因子筛掉，则每个数只被筛掉一次，时间复杂度为O(n)
实现：
数被质因子筛掉：数A=最小质因子B*数C
再进一步，保证被最小质因子筛掉：
数C的最小质因子&gt;=B
若随着B的增大，C中有小于B的因子，则不能保证B为最小质因子
借此剪枝
代码：
#include&lt;iostream&gt;
#include&lt;vector&gt;
#include&lt;algorithm&gt;
using namespace ]]></description><category></category></item></channel></rss>