摘要:/* 对于A的任何一种排列 设B至少i个位置和A相同:C(n,i)*A(m-i,n-i)对上面那个容斥下就行 */ #include<bits/stdc++.h> using namespace std; #define ll long long #define mod 1000000007 #de
阅读全文
摘要:1.函数原型对象 Function 的使用 <!--将字符串转换成可执行的代码--> 小朋友,请输入简单计算 <input type="text" id="calc"/> <input type="button" value="计算" onclick="calc()"/> 结果:<span id="
阅读全文
摘要:看了一整天三角剖分。。能找到的题只有求最大面积最小的三角剖分。。 然而这题除了用些三角剖分的性质外。。其实是个dp #include <bits/stdc++.h> using namespace std; const int INF = 1e9; const int maxn = 50 + 5;
阅读全文
摘要:面完试第一场vp cf,感觉题目挺规矩的,可能是有些历史了 c #include <bits/stdc++.h> using namespace std; const int inf = 0x3f3f3f3f; const int mod = 1e9 + 7; const int N = 1e5 +
阅读全文
摘要:AVL 重点基本上在两个rotate里面 #include<bits/stdc++.h> using namespace std; #define N 200005 struct Node{ int key,height; Node* lc; Node* rc; }; Node* root = NU
阅读全文
摘要:OS内存段页机制 1 内存分段机制 1.1 重定位 重定位可以在编译或载入程序时,修改程序中的地址(即原来程序中的地址是相对的) 如有以下程序 ... 1040:_main:mov [300], ... call xx 1000:call 40 在编译时给这段程序增加一个偏移量offset=1000
阅读全文
摘要:OS进程/线程切换 1.基本概念 1.1 进程 进程:运行中的程序,同一个程序可以运行出多个进程,其不同之处表现在PCB中 PCB:用来记录进程信息的数据结构,类似于当前CPU的快照加上一些进程本身的数据 CPU切换进程from->to:需要将当前运行着的进程from的PCB保存下来,然后将to的P
阅读全文
摘要:分析OS系统调用 一些基本概念 系统调用概念 系统库中为系统调用编写了许多接口函数(API),不同的API对应了不同的真正的(OS内核中)系统调用 从实模式到保护模式 x86系统在刚开机时处于实模式,即cs:ip的寻址方式为cs左移四位+ip,寻址能力只有20位,当bootsect.s和setup.
阅读全文
摘要:好像以前在cf上碰到过类似的题,但是也思路上又不太一样。。 首先我们确定用map:mp来存每条直线的解析式ax+by+c=0 那么必然要两两枚举直线,然后判有多少个点在直线上:这样复杂度貌似是O(n^3)的,显然要优化一波 可以发现很多点其实不在直线上,那么我们要转换下统计的方式,改成一条直线一条直
阅读全文
摘要:这道题dp部分不难,就是建模和写起来麻烦。。 首先分析给定的地图,我们可以发现只有那些石堆,起点,终点,机关所在地是有用的(不超过100)个点的信息是有用的 再进行分析,可以以将起点终点机关当做点,石堆当做边来建图 然后我们就可以在无向图上进行dp 经典的tsp问题,dp[S][i]表示访问的点集状
阅读全文
摘要:这题显然可以用后缀自动机的endpos集合来做,复杂度也应该是所有解法里最优秀的O(n) 但是写起来太麻烦了,用二分+字符串hash可以轻松过掉 ps:本题hash冲突比较严重,但是用自然溢出反而不会冲突。。另外用unordered_map比map要快很多 class Solution { publ
阅读全文
摘要:最近做题老被lambda表达式折磨(c++的class内部sort函数里不让自定义cmp函数,只能丢一个匿名函数进去),索性把这块东西学一学 首先是c++11 的lambda: [函数对象参数] (操作符重载函数参数) mutable 或 exception 声明 -> 返回值类型 {函数体} 下面
阅读全文
摘要:这题要真推算起来还是比较复杂的,但是可以先猜个结论: 首先肯定是前面一半复制到后面一半:这是很显然的,所以答案字符串由前面一半所控制 我们把前面一半+1,前面一半-1都考虑进去,如果没有进位退位(即字符串长度保持不变的情况下),那么这三个字符串足以覆盖答案出现的范围 下面再考虑进位和退位,显然进位的
阅读全文
摘要:老经典题了,不过如果不是这题我差点忘了单调队列的性质。。平时做的几乎都是单调栈 这题和区间的和相关,那么首先弄一个前缀和出来(记得偏移一位,在前面补上个0),然后再遍历这个前缀和数组 遍历过程中维护一个单调队列deque 维护单调性:第i个元素进队时弹出后面所有不小于它的 尺取更新答案:完成上面一步
阅读全文
摘要:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null 经典快慢指针,首先用快慢指针s,f从head开始扫描,设两个指针在一段时间t后相遇 此时慢指针走了t步,设t=a+b,其中a是环外的,b是环内部分 此时快指针走了2t步,同时快指针一定在环上绕了k圈,设环长度为c,有等式2
阅读全文
摘要:有幸打上了wls的举办的第一场比赛 知道一定是矩阵快速幂加速dp,但是递推公式一下子有点难弄 看了题解后才发现可以将这些六边形平放,平放之后很容易发现从第i个到第i+1的关键点是1,2: 因为第i+1个六边形所有点的所有方向的状态,都是由第i个六边形1或2的方向推出的 所以我们只要dp第i个六边形点
阅读全文
摘要:这题的强化版 1325F 题目里很友好的给了一个结论:对于任何一张n个点的无向图,任何一个k<=n,图中要么有大小不超过k的环,要么有大小为ceil(k/2)的独立集 证明很简单: 我们先定义单元环:环上的点的度数都为2 对于任意一个单元环,其大小如果超过k,那么必有>=ceil(k/2)的独立集
阅读全文
摘要:给定一个[0,n-1]排列p,每次询问(i,j)返回pi|pj,最多4269次询问,推出这个排列 本题关键在于确定0的位置 一个结论:我们可以通过两次询问,从三个数中排除掉一个肯定不是0的数 因此:我们维护住两个值下标a,b,并且假设0在pa,pb这两个数中出现 初始时a=0,b=1,然后枚举c=[
阅读全文
摘要:这题非常好。。看似很简单其实比较复杂,交了一堆假算法全wa了。。 看题解也好久才弄明白 /* 给定一张有向图,确定一个点T,问有多少T0,满足所有T0->T的路径,都经过边(T0,T) 建立反图,T变为起点,求所有T0,满足T->T0所有路径都经过(T,T0) 首先确定用bfs,我们从每个和T连边T
阅读全文
摘要:/* 直接求多边形面积 */ #include<bits/stdc++.h> using namespace std; typedef double db; const db eps=1e-6; const db pi=acos(-1); int sign(db k){ if (k>eps) ret
阅读全文
摘要:老套路了。。 /* 给定起点(xs,ys), 终点(xd,yd), 最大旅程距离B 汽车的每公里代价C0 其余交通方式数量T<=100 其余交通方式代价[C1..CT]<=100 车站数量N<=1000 第i个车站的位置(xi,yi),边数li<=100,每条边(j,mj)表示连向第j个车站,交通方
阅读全文
摘要:思考了挺久的一题,主要卡在建图这一块,序列上的问题很难想到图论上。。 可以交换位置是一种关系,那么不能交换也是一种关系:两个不是朋友的点,相对位置保持不变! 不能交换的关系的两点就可以连边,在图上u->v就表示u一定在v前面 但是这样暴力建图显然会炸,我们再进行优化: 我们把动物i(设物种x)和其后
阅读全文
摘要:#include<bits/stdc++.h> using namespace std; #define N 300005 #define mod 998244353 #define ll long long int n,a[N],m,b[N],c[N],d[N]; int main(){ cin>
阅读全文
摘要:/* gcd(x,y)=1 可推出 gcd(x+y,xy)=1 反证法:gcd(x+y,xy)=c,c>1,那么设x+y=ac,xy=bc 由于xy互质,所以c必定一部分质因子px出自x,另一部分py出自y x+y=a*px*py,其中px*py>1,且(x,y)=1,这是不成立的 假设不成立,所以
阅读全文
摘要:这套题简单得匪夷所思。。def都是分析下性质就出来了。。 d:把B周围四个点标记一下,然后跑一次联通块就行 #include<bits/stdc++.h> using namespace std; #define N 55 int X,Y,n,m,f[N][N],v[N][N]; char mp[N
阅读全文
摘要:很有意思的构造题,前面尽可能长的设一连串1,后面用[n+1,2n]去补,补的方式也是一连串的构造,使连续串尽可能长,每段的贡献是len*(len-1)/2 #include<bits/stdc++.h> using namespace std; #define N 200005 #define ll
阅读全文
摘要:web课布置了个作业,给一份全是bug的日历,要解决chrome上的事件冲突问题 ps:事件冲突解决起来真的很麻烦 1.onblur 和 onclick冲突 onclick 相当于 在某一元素上触发了 onmousedown(即鼠标按下)后 任然在该元素 上 触发了onmouseup(鼠标按键弹起)
阅读全文
摘要:一直想学怎么求平面最近点对,看了一上午oi wiki整明白了 传送门 https://oi-wiki.org/geometry/nearest-points/ 大致思路 1.开始分治前将所有点按x坐标排序 2.分治(l,r),如果r-l<=5,那么直接暴力求出结果然后返回 3.反之分治左右区间,设左
阅读全文
摘要:ps:DOM编程的一些前置知识点 常用事件和注册事件的两种方式 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>JS的常用事件</title> </head> <body> <script type="text/javascri
阅读全文
摘要:变量定义和使用 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>关于JS中的变量</title> </head> <body> <script type="text/javascript"> /* java中的变量: 1、jav
阅读全文
摘要:这题很奇怪啊,思路没问题但是自己写的有问题 碰到大数据总是T,也不知道错在哪里(也许是爆栈了?) ps:原来是在求欧拉回路时边指针没有向前推 从小到大枚举答案k 那么所有连接的边至少是2^k的倍数 这种模型可以想到欧拉回路; 图上2^k个点,对应权值是[0..2^k-1],每个大珠子看成一条边,u,
阅读全文
摘要:贪心策略:用一个map当做桶来用,然后从大到小遍历map 如果某个值出现次数是偶数,说明这个数可以被两边平分, 反之有一边就要多一个这个数,为了平衡,我们要在另一边补上缺少的值 补的方法:设少的值是x,那么此时大于x的数已经分配完成,剩下的数范围为[0,x-1],我们只要枚举x-1到0,直到补完缺少
阅读全文
摘要:构造方法:设当前点是now,如果下一次向右转,那么下一个点就是未访问过的和now叉积最逆时针的那个;反之下一次左转,那么下一个点就是未访问过的和now叉积最顺时针的(意会一下即可)那个点 总之就是不断找最极端的点nxt,使其他所有点都在now->nxt的左侧和右侧,这样必定会有解,复杂度O(n^2)
阅读全文
摘要:这题真的不错,有cf 的感觉 三元环计数:这题要先把三元环统计出来 https://www.cnblogs.com/Dance-Of-Faith/p/9759794.html 贪心:以v为顶点,把所有包含v的三元环统计出来,然后取权值最大的三个三元环t1,t2,t3,可以确定v为顶点的策略中至少有这
阅读全文
摘要:线性筛+dp 用埃氏筛好像过不去。。可能是我写的dp太慢了。。 首先可以确定的是这题是可以dp的,对于每个数num[i],将其质因子分解出来,对于每个质因子pi,找到[1..i-1]里所有可以被pi整除的位置pos,用mi[pos-1]去更新mi[i]即可 向右扫描的时候维护一个pos[]数组,po
阅读全文
摘要:很经典的题,但是好久没做这类有点忘了。。 经典状压dp做法:用S表示一行的状态,某位为1表示该位被占用,反之表示该位未被占用 dp[i][S]表示第i行状态为S时的最大覆盖数,那么枚举第i-1行的状态S',如果S,S'都合法,那么此时可以求出S状态下最多可以放多少块砖 预处理出cnt[S1][S2]
阅读全文
摘要:这题实际上是要构造出一种最优的调度策略吧。。 有一个二叉树形式的任务依赖结构,我们有两个 CPU 核,这两个核可以同时执行不同的任务,问执行完所有任务的最小时间,也即是希望两个 CPU 核的并行时间尽可能大 先对题目给定的条件进行分析: 1.对于子树u来说,结点u是必须串行的(u下的结点都依赖于u)
阅读全文
摘要:这个状压还要输出方案实在是太ex了 第 i 行放完了水后,能新种下的甘蔗数量取决于 i − 1 行和 i − 2 行 的状态 令 dp【i,j】 表示放完前 i 行且最后两行状态为 j 时最多能种下的数量 我们在第 i 行放水有可能能使 i − 1 行的某个格子能够放上甘蔗了, 但如果不知道 i −
阅读全文
摘要:被string坑惨了。。 使用string前记得如果要直接进行下标运算,如s[10]=‘a'这种,要记得先给string开空间,string s=string(100,'a') 这样 首先预处理出原串中所有类型数对的个数,如12,13,14...这种 考虑每种变换,都是在原串的基础上,通过映射得到的
阅读全文
摘要:题意: 把 n 个数分成若干组,组内互质,问最少要分几组。题目给 了一个贪心的假算法,你需要构造一组输入和对应的解使得你分的 组数恰好比贪心的少 k ,不要求你分的也是最少的 数组a不能有重复元素的解法 给定数组A,要求将A分最少的组,每组内的元素互质 有一个假算法,枚举A[1..n],如果没有可加
阅读全文
摘要:感觉这题真好! /* 首先可以将操作换一种理解方式:取s[i]然后插到其左边任一位置 可以发现从s->t是一个凑后缀的过程 那么我们将s,t翻转,将操作变成取s[i]然后插到右边任一位置,于是s->t变成了凑前缀的过程 dp[i][j]表示s[1..i]凑出t[1..j]的代价 如果s[1..i]能
阅读全文
摘要:昨天早知道先做这题的。。 随便写写就能过 /* 贪心:结点按a升序排序依次处理 s[u]表示u子树b=1结点个数 t[u]表示u子树c=1节点个数 dif[u]表示u子树bc不同的个数 vis[u]表示u所有子孙被访问了 每次遍历到u,先求一次s,t,dif 如果s[u]=t[u],那么u的贡献就是
阅读全文
摘要:一般交互就跑不出二分。。 但是这题我看了半天才明白啥意思。。最后还fst了 发现有个地方多输出了点东西。。 第一次询问:最大值mx 后面十次询问:二分确定最大值所在位置x 最后一次询问:设x所在si,问出si对应的答案,其他位置的答案都是mx #include<bits/stdc++.h> usin
阅读全文