avatar
文章
165
标签
111
分类
5

首页
分类
友链
说说
Doraemon's Blog
搜索
首页
分类
友链
说说

Doraemon's Blog

数学期望
发表于2021-11-18|算法|期望
期望: 结果乘以结果出现的概率 $E(X+Y)=E(X)+E(Y)$ $E(XY)=E(X)E(Y)——(X和Y相互独立)$ 问题一描述投硬币,连续出现K次正面的投掷次数期望值。 解法假设已经连续抛出$n-1$次正面,需要$T{n−1}$次。想得到$n$次正面,则再进行一次投掷$Tn=T{n−1}+1+?$ 若硬币为正面则游戏结束,还需要抛0次$Tn=T_{n−1}+1+0.5∗0+?$) 如果硬币为反面,则游戏重来,还需要投掷$0.5∗Tn$次,递推公式如下所示: $Tn=T_{n−1}+1+0.5∗0+0.5∗Tn$ 求出通项公式: $Tn=2^{n+1}+2$ 问题二题目链接 设dp[i]表示i个座位最后坐满人的情况,那么对于n个座位而言,第一个人上车就有n个选择,坐在第一个位置,剩下的就是dp[n-2],坐在第二个位置,剩下的就是$dp[0]+dp[n-3]$,坐在第三个位置,剩下的就是$dp[1]+dp[n-4]$,以此类推… 求个和,就是$2*sum[n-2]$,sum[n-2]表示前n-2项的前缀和(dp[0]=0) 还要把第一个人加上,因为有n个选择,所以加n,每 ...
三分
发表于2021-11-15|算法|三分
POJ2420三分和二分输出答案是l还是r就看中间的判断条件,不满足条件更新的那个值就是要输出的值 12345678910111213141516171819202122232425262728293031323334353637383940#include <iostream>#include <cmath>#include <iomanip>#define ios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)#define endl '\n'using namespace std;const int N=1e3+100;const double eps=1e-5;int n;int a[N],b[N];double getdis(double x,double y){ double res=0; for(int i=1;i<=n;i++) res+=sqrt(pow(x-a[i],2)+pow(y-b[i],2)); return res;}double ...
CCPC2021网络赛复赛
发表于2021-10-11|题目|比赛
Primality Test根据题意可知,求连续两个质数相加除以2向下取整后是否还是质数,因为是连续的两个质数,所以取中位数后一定不会是质数,1除外 123456789101112131415#include <bits/stdc++.h>using namespace std;typedef long long LL;LL t , n;int main(){ scanf("%lld" , &t); while (t --) { scanf("%lld" , &n); if (n == 1) printf("YES\n"); else printf("NO\n"); } return 0;} Nun Heh Heh Aaaaaaaaaaa给定一个字符串,求这个字符串有多少个子序列满足由前缀nunhehheh和k个a(k>0)组成。 例如nunhehhehaaaa ...
ICPC2021网络赛2
发表于2021-09-30|题目|线段树+欧拉函数
L Euler Function 题目大意: 给定n个数字,每一个数字不超过100,m次询问 把一个区间的所有数字乘以w(w<=100) 求一个区间所有数的欧拉函数和(mod 998244353) 首先明白一个性质: $phi(n)=n/(p1p2p3…)(p1-1)(p2-1)*(p3-1)…$ 而n也可以表示为$p1p2p3…$ 所以$phi(n)=(p1-1)(p2-1)(p3-1)…$ 那么$phi(w*n)$的值怎么求? 把w质因子分解,可以发现如果n和w有同一个质因子c,那么$phi(cn)=phi(n)c$,如果存在一个质因子w有,n没有,那么$phi(cn)=phi(n)(c-1)$,发现w的质因子在要乘的区间中都有,那么这道题就变成了简单的区间乘法,区间询问,但是区间中不一定包含w的所有质因子,所以就要去找到那些不包含w的某个质因子的位置,把这些位置单独拿出来乘以(c-1),如何找到这些位置呢? 可以考虑开一个vis数组,vis[x]标记一个区间是否都存在质因子x,那么每次做区间乘法时,就可以把w质因子分解,对于每一个质因子c,都去线段树中找,如果一个区间 ...
targan缩点
发表于2021-09-09|算法|targan
> 用途:用来缩点(实际是用来缩强连通分量) 强连通分量:在有向图G中,如果两个顶点u,v间有一条从u到v的有向路径,同时还有一条从v到u的有向路径,则称两个顶点强连通。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向非强连通图的极大强连通子图,称为强连通分量。 算法流程首先需要引入几个数组: dfn[i]: 表示刚遍历到i号节点的时间戳 low[i]: 设以i为根的子树为Subtree(i),low[i]定义为以下节点的dfn最小值:subtree(i)中的节点、从Subtree中连出一条不指向子树的边 idx[i]: 缩完强连通分量后i号节点后所在的缩点编号 siz[i]: 缩点的子树大小 那么代码就可以写了 1234567891011121314151617181920212223242526void targan(int x){ dfn[x]=low[x]=++tim; stk.push(x); instk[x]=1; for(int i=h[x];~i;i=e[i].next){ int v=e[i].to; if(!dfn[ ...
A*算法
发表于2021-09-07|算法|A*算法
A*算法在求一个点到目标点的最短距离时,可以加快速度,如果使用dijstla是nlogn的时复,但是A*更快,当节点足够多,边足够大时,可能不能求起点到所有点的最短距离,空间不够或者时复顶不住,这个时候A*或许能做,A使用了一个启发式函数f(),其含义是节点到终点的估计距离,这个距离可以是曼哈顿距离,可以是实际到终点的最短距离等等,只要满足*估计距离小于等于实际距离即可,只要满足了这个,那么用f(u)+dis(u)当作优先队列的排序规则,每次取出最小值,这个点的最短距离就确定了,证明我找不到,画个图可以想一下是有道理的 ACWing.178.第K短路 我看到这道题,不会A之前,我只能想到Knlogn的时复,跑K次dijstla…太菜了,其实更好的是使用BFS,给每一个状态加上一个距离,使用优先队列,每次取出距离最小的点,其实就是dijstla,只不过少了dis数组,这样子做如果不加优化空间和时间都顶不住,所以开一个cnt[]数组记录每一个点被更新了几次,如果一个点已经被更新K次了,之后这个点就没必要再入队了,加上这个优化后,时复和空间复杂度最坏就是Knlogn,但是这道题还是过不去 ...
Leetcode-1915-最美字符串数量
发表于2021-09-05|题目|状压+前缀异或和
最美子字符串的数目美丽的字符串定义为该字符串至多一个字母出现奇数次,给定一个字符串求该字符串包含多少个美丽的子串。(该字符串由前十个小写英文字母组成) 由于只会由前10个字母组成,所以可以把所有的字符当作一个二进制位,0表示该字符出现了偶数次,1代表字符出现了奇数次,那么现在好的状态就变成了0和2^i^,我们从前往后遍历字符串,求一个前缀异或状态,两个前缀异或起来即可得到一段区间的状态,那么问题就转化为了所有的位置前面有多少个状态和当前状态异或后是一个好的状态,如此我们就可以开一个数组cnt[i]记录从起始位置到当前位置i状态出现的次数,ans+=cnt[good^state]即是答案,good是一个好的状态,state是当前状态。 12345678910111213141516171819202122class Solution {public: long long wonderfulSubstrings(string word) { long long res=0; int cnt[1025]; memset(cnt,0,sizeof cnt); ...
AC自动机
发表于2021-08-20|算法|AC自动机
AC自动机以trie为基础,结合了kmp的next数组思想而创造出来的一种数据结构,用来解决多模式串匹配问题 问题背景P3808 【模板】AC自动机(简单版) 给定n个模式串($n<=1e6$),一个主串s($s<=1e6$),问主串中包含多少个这些之中的模式串? AC自动机传统做法,利用KMP,O(n)遍历每一个模式串,O(n)匹配是否包含此模式串,复杂度O(n2) 利用AC自动机,先把所有的模式串插入到trie中,接下来预处理一个fail数组,fail[i]表示i节点失配后该去找哪个节点(类似next数组),fail数组的真正含义是当前正在匹配的模式串的后缀和其他所有模式串的前缀可以匹配最大长度的那个模式串,有点绕。 这张图中的6号节点的fail指针指向7号节点,因为6号节点的后缀s和7号节点的前缀s相同,且匹配长度最大,所以fail[6]=7。 1234567891011121314151617181920queue<int> q;void build(){ //这里把根节点的儿子节点入队,因为如果只把根节点入队的话会导致根节点失配指 ...
Bellman-ford
发表于2021-08-06|算法|图论
Bellman-ford 用途: 判负环 计算含有负权边的最短路径 重边不会影响答案,因为Bellman-ford会遍历所有的边 算法流程先存边,Bellman-ford的存边十分随意,什么储存方式都可以,只有一个要求,就是每次都要遍历到所有的边! 既然如此就用一个结构体去存,一个for循环就可以遍历到所有的边了。 123struct node{ int u,v,w}e[MAXN]; 算法十分简单,每次只要让所有的边进行一次更新即可,如果不存在负环,那么一个点最多被n-1个点更新(除了自己),所以外层循环遍历n-1次,内层循环遍历每一条边 123456for(int i=1;i<n;i++){ for(int j=1;j<=m;j++){ int u=e[j].u,v=e[j].v,w=e[j].w; dis[v]=min(dis[v],dis[u]+w); }} 如果存在负环,那么经过上面的松弛操作后,一定还有点还可以被松弛,负环可以把环上点能到的所有点的权值都松弛到无限小,遍历所有点,检查 ...
数位DP
发表于2021-08-01|算法|数位DP
数位DP 解决的是求一段区间中满足一定条件的数的数量,形式固定 数位DP模板123456789101112131415161718192021int num[100],dp[100][...];int dfs(int pos,int ...,bool limit) { if(pos==0) return ; if(!limit && dp[pos][...]!=-1) return dp[pos][...]; int up=limit?num[pos]:9; int sum=0; for(int i=0; i<=up; i++) { if(...) sum+=dfs(pos-1,...,limit && (i==up)); } if(!limit) dp[pos][...]=sum; return sum;}//ps 如果有前导0就可以加一个 lead,一开始传1,然后后面就传lead&&(i==0)就可以了int work(int x) { int len=0; while( ...
1…678…17
avatar
Doraemon
记录成长经历
文章
165
标签
111
分类
5
Follow Me
公告
纵岁月在笔尖洇开深浅,初心始终是砚台上那方不涸的墨。
最新文章
进程上下文到底是什么东西?
进程上下文到底是什么东西?2025-10-02
协程食用指南
协程食用指南2025-10-01
利用 Redis 实现分布式锁
利用 Redis 实现分布式锁2025-09-27
分布式 ID 的生成方案
分布式 ID 的生成方案2025-09-20
分布式事务
分布式事务2025-09-19
最新评论
正在加载中...
分类
  • 技术8
  • 生活5
  • 算法88
  • 记录23
  • 题目36
标签
win10 kmeans 种类并查集 雪花算法 小游戏 可持续化并查集 线性回归 随笔 异或题 状压+前缀异或和 2020 bitset优化 DFS NIO GC 考研 题目 BIO 分组背包 笔试 爬虫 基础数学 遗传算法 背包 dfs 内核 倍增 sql语法 字典树 离散化差分 KMP 矩阵快速幂 三分 单调栈 UUID 刷题日记 CSS tarjan 算法 纪念我的ACM史
归档
  • 十月 20252
  • 九月 20255
  • 三月 20252
  • 二月 20255
  • 一月 20251
  • 九月 20243
  • 八月 20242
  • 七月 20242
网站资讯
文章数目 :
165
已运行时间 :
本站总字数 :
257.7k
本站访客数 :
本站总访问量 :
最后更新时间 :
©2020 - 2025 By Doraemon
框架 Hexo|主题 Butterfly
Hi, welcome to my blog!
搜索
数据库加载中