- 博客(24)
- 收藏
- 关注
原创 算法设计实验一(分治与递归) 题目二 :寻找第k小的数 (TOP-k 问题)
参考于:zhi hu 链接 最直接的方法就是直接排序,但是我们仅仅需要第k小的数,并不需要知道每个数在整个数组的相对位置,因此排序O(N*logN)的时间复杂度对这个问题来说就略显奢侈了。 学了O(n)的方法后,发现这种方法有个名字,叫BFPRT算法。参考了上面链接关.
2021-10-21 09:48:45
1963
1
原创 算法设计实验一(分治与递归) 题目四 :金块问题
老板有一袋金块(共n块,n是2的幂(n≥2)),最优秀的雇员得到其中最重的一块,最差的雇员得到其中最轻的一块。假设有一台比较重量的仪器,希望用最少的比较次数找出最重和最轻的金块。并对自己的程序进行复杂性分析。折半。分治,递归。分别找最小值和最大值。仅供参考#include<bits/stdc++.h>#define ll long long#define db doubleusing namespace std;const
2021-10-20 14:37:09
1660
原创 算法设计实验一(分治与递归) 题目三 :二分搜索
设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置。并对自己的程序进行复杂性分析。 二分找到大于等于的 L 的位置,最后,如果L的位置的数字等于下x,直接输出一个L位置的数(x).否则,输出L-1位置和L位置的数(数组中
2021-10-19 21:31:27
847
原创 牛客--卡牌游戏 (概率DP 逆推) P2059
题目链接:卡牌游戏n个人,m张卡牌上有m个数字。庄家随机一张卡牌,数字为X,第X位出局,随后第X位的下一位做庄家,问,每个人最后获胜的概率是多少?约瑟夫环的变形问题,这里每次等概率的抽牌,数字是随机的,dp[i][j]: 还剩i个人时,第j个人获胜的概率 。dp[1][1]=1.0 最后剩下的那个人获胜从游戏的结局向前推,剩i人时,枚举m张卡牌,计算出下一局他的位置(也就是剩i-1人时),累加。我们算的是第j个人获胜的概率,如果刚好抽到他自己出局,忽略。抽到出局的位置temp:1,tem.
2021-10-18 10:21:05
2335
原创 牛客--守卫者的挑战(概率DP,dp[i][j][k])
题目链接:守卫者的挑战dp[i][j][k] :前 i 次挑战 获胜 j 次,背包容量还剩K的概率由于只需要最后背包容量大于残片的数量,k如果0~~n的话,中间会出现负值,由于n<=200,意味着最多-200。因此 设置一个绝对零点, int pre=n+min(n,k); //绝对0点可以用正数来描述负多少。由于k可能会很大,但是碎片最多n个,取与n的最小值即可.min(pre+n,k+a[i+1])迭代容量范围:.
2021-10-16 22:05:55
402
原创 对拍程序的写法---四部分
四步:1,数据生成2,AC代码3,WA代码4,测试最后:文件都编译后运行,遇到结果不一致的情况会停下错误的输入样例在data.in中查看1,数据生成#include <bits/stdc++.h>using namespace std;int main(){ srand(time(0)); int n=rand()*rand()%200000; int m=rand()*rand()%200000; printf("%
2021-10-14 23:16:19
309
原创 2021ccpc网络复赛(hdu7131)--Nun Heh Heh Aaaaaaaaaaa
题目链接: Nun Heh Heh Aaaaaaaaaaa给定了字符串 “nunhehheh”,简单dp求出前缀有多少个符合的子序列,后缀有多少个a累加 前缀的序列的个数 * 2^(后缀a的个数-1 )累加时要注意去重,当前的序列数会包含前面一次累加时的个数,因此要保存前一次的序列数,减掉前一次的。取模要小心#include<bits/stdc++.h>#define ll long longusing namespace std;const int .
2021-10-14 22:06:31
422
原创 第23次CSP认证(202109)
第23次CSP认证---202109第一题 :数组推导 (贪心)第二题 :非零段划分 (差分)第三题 :脉冲神经网络第四题 :收集卡牌第一题 :数组推导 (贪心)贪心循环一遍在这里插入代码片第二题 :非零段划分 (差分)70分做法:暴力,枚举 出现过的数字。#include<bits/stdc++.h>#include<iostream>#define ll long long
2021-09-30 13:02:08
3476
7
原创 第几个幸运数(筛选)
第几个幸运数Core :小于59084709587505这个数的个数并不多,所以我们可以暴力的求出所有小于59084709587505这个数的所有的幸运数,它是第多少个就一目了然了。那如何筛选出小于等于这个数的所有幸运数呢? 定义一个优先队列(可以自动排序,logN的复杂度。队首可以是最小值,最大值,还可以自定义排序)。初始的时候队列里有3,5,7。每次取出一个当前队列中的最小值,并存放到另一个空间vector中。每次这个最小值分
2021-09-29 11:23:42
423
原创 线段树 (lazy标记)--- 模板
线段树A:建树B:单点更新C:区间查询D:区间更新 (lazy标记)每次并不断的分,不断的分,更新,查询 的操作都是 log(N)。A:建树const int maxx=100019;int a[maxx],tree[maxx*4];void build(int node,int start,int endd) //build(0,1,10) 从0开始建树。start,endd 是实际的数组的下标范围{ if(start==endd) //到达叶子节点 { t
2021-09-18 17:08:10
604
原创 树状数组 -- 理解与模板
树状数组A:简述B:单点修改,建树C:查询D:模板题A:简述/****************单点修改,前缀和,区间和核心:巧妙的运用了类似二分的思想对数组进行了 按位的划分与关联*****************/注意二进制中的1的位置和包含关系。最低为的1的位置决定了这个数组下含多少个点(1000 : 包含8个(2^(4-1) );;11100:包含4个(2^(3-1))) (图片来源于网络)B:单点修改,建树******* 注意:不能使用0位置,由于0加0一直0,会死循环。***
2021-09-17 23:46:35
347
原创 字串和子序列的区别
字串和子序列的区别 子串: Substring 必须连续 !!!子序列: Subsequence 不必连续 !!!(可以连续可以不连续) 读题的时候注意是 Substring 还是 Subsequence !!!例: &
2021-09-17 11:22:53
666
原创 hdu -- 1686 Oulipo (简单Hash,(操作字符))
简单哈希–操作字符串 题目链接: HDU 1686 Oulipo题意:给你两个字符串str1,str2.问:str1在str2中出现了多少次?实际上这一题是KMP的简单的模板题。这里用hash同样可以更加简单的解决Hash的三个步骤:1,初始化 ( init() )2,建哈希 ( make_hash() )3,取哈希 ( get_hash() )/******* Q:代码里为什么没有取模?****** A
2021-09-17 10:24:24
358
原创 牛客--列一列 ( 简单Hash,(操作数字) )
列一列(哈希思想)题目链接:列一列给定 一个类似斐波那契的数列的前100000项的具体结果 ( 注意是结果,不是第多少项求结果),让你判断给定的这个结果是这个数列的第多少项。(输入太大要以字符串的形式输入后再进行处理))由于早已经超long long,利用Hash的思想,取模后保存结果,后面遍历验证这里使用了3个质数取模来共同验证,比较保险。实测一个1000000009也可以过#include<bits/stdc++.h>#define ull unsigned long lo
2021-09-16 17:53:19
217
原创 堆优化 dijkstra
堆优化 dijkstradijkstra 模板题 hdu 254: https://acm.hdu.edu.cn/showproblem.php?pid=2544#include<bits/stdc++.h>#define ll long long#define inf 0x3f3f3f3f#define P pair<int,int>using namespace std;const int maxx=100019;
2021-09-15 23:43:01
425
原创 优先队列(priority_queue)--自定义排序
优先队列--自定义排序A: 默认排序B: 自定义排序 方法一: 运算符重载 方法二: 重写仿函数A: 默认排序1,priority_queue< int > a; // 基础类型, 默认是大顶堆,自动排2,priority_queue<int, vector< int &g
2021-09-15 23:23:02
6201
原创 自定义map排序---Key,Value
A:对key值排序B:对value值排序C:迭代器,输出A: 对key值排序1, 常用类型如 int, string 等,可自动对Key值排序map<int,double,less< int > > mp; //按int升序map<int,double,greater< int > > mp; //按int降序map<string,i
2021-09-15 15:40:53
220
原创 2020河南CCPC--E 发通知(离散化+差分)
E-发通知 题目链接:发通知注意注意注意:要对右端点+1后进行离散!要对右端点+1后进行离散! 为什么? 对右端点+1后进行离散,则该点在数轴上的表示就是空心点(相当于差分的右端点+1,逆操作)。这样,就能解决由于差分造成的中间点丢失的情况。那丢点的情况是怎样的?(pictures by myself)A 图, 初始下
2021-09-09 20:42:29
980
2
原创 牛客---出题人的手环 (离散化 + 树状数组 求逆序对数)
出题人的手环 题目链接: 出题人的手环树状数组求逆序对数将尾部的数拿到首部后,逆序对数的变化=原逆序对数+比它小的数的个数–比它大的数的个数注意: 1, 减完之后可能会出现负数,要加mod后取模。 &
2021-09-08 19:04:23
339
原创 树状数组--求逆序对数
树状数组–求逆序对数借助树状数组的前缀和 来表示出有多少个数比待处理数小。所处位置的下标减去它前面小于等于它的个数,就求得它前面有多少个比它大的数的个数例: 5 4 2 3 1 5更新一个数,处理一个,ans=0;第一步:4 &n
2021-09-08 17:11:52
298
1
原创 牛客 -- 小M和天平(简单dp)
小M和天平题目链接:https://ac.nowcoder.com/acm/problem/13586问:给你n个砝码,你是否能称出来重量为k的物品。问题类似于21年蓝桥杯的 “砝码称重” 这个题,一个问重量为k能不能称出来,一个问能称出来多少个不同的重量k设dp[i][j] ,表示前i个砝码能否称出重量为j的物品( 0 or 1 ),注意初始化类似于背包,第i个物品,选或不选。#include<bits/stdc++.h>#define ll long longusing
2021-09-07 15:52:21
503
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人