鱼塘钓鱼
鱼塘钓鱼题目描述
解题思路 首先,我们需要明确一个事情,我们钓鱼的所有路线,只能是向右走,不能回头,如果回头相当于多浪费了一个池塘到另一个池塘的时间。所以我们只需要枚举所有路径,并且求出所有路径中最优解就好了。
这就是一个多路归并问题。我们只需要找到1 - i路径中,所有池塘根据时间排序能调到的鱼前t个就好了。
代码 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748package com.zgy;import java.io.*;import java.util.*;class Main{ public static int N = 100,n,T; public static int[] a = new int[N],d = new int[N],ne = new int[N],work = new int[N]; public static Scanner sc = new Scanner(System.in); / ...
技能升级
技能升级题目
解题方法整体来说,我们其实就是求出所有技能包括按了之后的攻击力,然后求出前M大的技能,最后就是答案。有以下几种方法:
优先队列我们可以先把所有攻击力进行排序,从大到小的顺序。每当我们取出最大的技能之后,将这个技能减少b,在添加到队列当中。这样选出M个就是答案。但是这样会超时,最后的时间复杂度是MlogM这样一定会超时。
二分在这里我们需要考虑是不是可以直接找到M这个位置或者找到这个x值的技能?使用二分?
求出x值
我们首先考虑一下x的值是否有二段性质?
如果当前值 > x,那么前面的数字一定是 > M
反之,前面的数字一定是 <= M
判断前面的和
二分的过程是logM肯定满足要求,但是我们如何根据x判断前面有多少数字呢?
我们每一个技能和他按下 直到没有攻击力组成的序列是一个等差序列,其实等价于 这个等差序列中 小于x的数字有多少个?我们可以使用(a - x) / d下取整求的。遍历所有技能就可以求出来,所以求出来x这个值就是NlogM的时间复杂度。
既然我们求出来了x,如何求出来前面的所有和?很简单,我们等差序列 首项a 公差d 我们 ...
http和https协议
HTTP和HTTPS协议点击跳转
github配置hexo页面
github配置hexo网页 原理就是将hexo的public目录下所有静态网页都上传到github仓库,但是需要注意一些东西。
配置github 我们创建一个仓库,仓库的名字必须是 <github用户名>.github.io 。不然的话你最后访问的网页总会加上你的仓库名。然后配置仓库,在setting中设置pages,将sourse设置为github actions。
然后在github的setting中我们可以建立一个token用来授权hexo访问权限。不然的话每次部署都会要你的用户名和密码(开始一直报错,密码就是token)。
hexo配置一键部署在hexo项目中我们需要设置一下配置文件,将_config.yml 最后面加上
12345deploy: type: git repo: https://{你的token}@github.com/Roxanne299/Roxanne299.github.io branch: main
最后你就可以使用hexo deploy命令进行一键部署了但是需要注意我们每次上传到git ...
火柴排队
[NOIP2013 提高组] 火柴排队题目背景NOIP2013 提高组 D1T2
题目描述涵涵有两盒火柴,每盒装有 $n$ 根火柴,每根火柴都有一个高度。 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为:$ \sum (a_i-b_i)^2$。
其中 $a_i$ 表示第一列火柴中第 $i$ 个火柴的高度,$b_i$ 表示第二列火柴中第 $i$ 个火柴的高度。
每列火柴中相邻两根火柴的位置都可以交换,请你通过交换使得两列火柴之间的距离最小。请问得到这个最小的距离,最少需要交换多少次?如果这个数字太大,请输出这个最小交换次数对 $10^8-3$ 取模的结果。
输入格式共三行,第一行包含一个整数 $n$,表示每盒中火柴的数目。
第二行有 $n$ 个整数,每两个整数之间用一个空格隔开,表示第一列火柴的高度。
第三行有 $n$ 个整数,每两个整数之间用一个空格隔开,表示第二列火柴的高度。
输出格式一个整数,表示最少交换次数对 $10^8-3$ 取模的结果。
样例 #1样例输入 #112342 3 1 43 2 1 4
样例输出 #111
样例 #2样 ...
离散化
离散化 离散化其实很简单,就是将我们很大范围的数字映射到一个相对于说较小的范围。其中分为不注重大小关系的离散化和注重元素大小位置的离散化。前面的很简单我们可以直接用拉链法来进行离散化就好。但是对于后者,我们需要先进行一个排序,排序之后还要去重,最后根据排序的下标进行离散化。这样相对麻烦。
于是,就有了一个较简单的离散化方法,我先掏出结论!
1234567891011//离散化a数组public static void work(int[] a){ for(int i = 1;i <= n;i++) p[i] = i; Arrays.sort(p,1,n+1.new Comparator<Integer>(){ @Override public int compare(Integer o1,Integer o2){ return a[o1] - a[o2]; } }); for(int i = 1;i <= n;i++ ...
逆序对问题
逆序对问题汇总 一直以来,求序列中的逆序对都是比较基础的问题,但是这个问题的延伸困扰了作者很久。简单的逆序队就是可以用归并排序和树状数组来求。但是逆序对可以扩展对无序序列排序,相邻的数字交换最小值其实就是逆序对的数量。下面我们来对这些问题进行一个总结。
定义 顾名思义,逆序对其实就是在序列$a_i$中,当$i < j$并且$a_i > a_j$时,我们将$a_i$和$a_j$统称为逆序对。当然逆序对的求法也可以总结成两种,一种是归并排序,记录每次交换的时候逆序对的数量。一种是树状数组,记录每个元素前面比他大的值并且后面比他小的值。
这里可以参考原始的求逆序对的数量
扩展 还有一种题目就是求序列无序到有序,需要交换多少次相邻数字,其实这个也是逆序对数量。这个思想其实就是冒泡排序的思想,可以参考下面的图片,我们每个数字最少需要交换多少次,可以这个数字参考前面和后面有多少个逆序对。
可以参考这个题目小朋友排队。还需要注意,如果我们使用树状数组求逆序对,需要进行一个离散化。
linux下安装v2ray
linux环境下配置v2ray1. 下载v2ray对应linux版本在下载地址选择v2ray-linux-64.zip下载。并且在服务器解压。
复制需要下载的链接使用wget命令下载(推荐下载好了传到服务器,这一步不走代理很慢)。
使用unzip命令解压文件unzip v2ray-linux-64.zip
2. 将可执行命令转移到指定目录将划线的命令权限改成所有用户可执行(v2ray.service v2ray@.service v2ctl v2ray)
12345chmod 777 v2raychmod 777 v2ctlcd systemd/system/chmod v2ray.servicechmod v2ray@.service
创建指定目录
12mkdir /usr/local/share/v2ray/mkdir /var/log/v2ray/
往对应目录转移命令 这样就可以使用systemctl启动了。
12345678910111213cp v2ray.service /etc/systemd/system/cp v2ray@.service /etc/ ...
相似基因
相似基因题目背景大家都知道,基因可以看作一个碱基对序列。它包含了 $4$ 种核苷酸,简记作 A, C, G, T。生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物。
在一个人类基因工作组的任务中,生物学家研究的是:两个基因的相似程度。因为这个研究对疾病的治疗有着非同寻常的作用。
题目描述两个基因的相似度的计算方法如下:
对于两个已知基因,例如 AGTGATG 和 GTTAG,将它们的碱基互相对应。当然,中间可以加入一些空碱基 -,例如:
$$\def\arraystretch{1.5}\begin{array}{|c|c|c|c|c|c|c|c|} \hline\tt A & \tt G & \tt T & \tt G & \tt A & \tt T & \texttt - & \tt G \ \hline\texttt - & \tt G & \tt T & \texttt - & \texttt - & \tt T & \texttt A & \tt G \ ...
合唱队
[HNOI2010] 合唱队题目描述为了在即将到来的晚会上有更好的演出效果,作为 AAA 合唱队负责人的小 A 需要将合唱队的人根据他们的身高排出一个队形。假定合唱队一共 $n$ 个人,第 $i$ 个人的身高为 $h_i$ 米($1000 \le h_i \le 2000$),并已知任何两个人的身高都不同。假定最终排出的队形是 $A$ 个人站成一排,为了简化问题,小 A 想出了如下排队的方式:他让所有的人先按任意顺序站成一个初始队形,然后从左到右按以下原则依次将每个人插入最终棑排出的队形中:
第一个人直接插入空的当前队形中。
对从第二个人开始的每个人,如果他比前面那个人高($h$ 较大),那么将他插入当前队形的最右边。如果他比前面那个人矮($h$ 较小),那么将他插入当前队形的最左边。
当 $n$ 个人全部插入当前队形后便获得最终排出的队形。
例如,有 $6$ 个人站成一个初始队形,身高依次为 $1850, 1900, 1700, 1650, 1800, 1750$,那么小 A 会按以下步骤获得最终排出的队形:
$1850$。
$1850, 1900$,因为 $1900 & ...