题解
文章平均质量分 65
gong_zi_shu
道阻且长,你我共勉
展开
-
Games101 作业3 interpolate + phong + texture + bump
学霸笔记 又是学霸笔记 还是学霸笔记 rasterize_triangle 在作业2的基础上对法向量、颜色、纹理颜色与底纹颜色(Shading Colors) 进行插值。翻阅代原创 2021-08-29 17:39:35 · 774 阅读 · 0 评论 -
Games101 作业2 cross + BoundingBox
设a(x1,y1),b(x2,y2)a(x_1,y_1),b(x_2,y_2)a(x1,y1),b(x2,y2),叉乘:a⋅b=x1y2−x2y1a\cdot b=x1y2-x2y1a⋅b=x1y2−x2y1 实现叉乘,代码意思对即可static bool insideTriangle(int x, int y, const Vec原创 2021-08-26 21:32:29 · 220 阅读 · 0 评论 -
Games101 作业1 旋转矩阵 + 透视投影
课程链接 学霸笔记 绕 Z 轴旋转很简单,如果希望旋转方向相反,将 alpha 换为 -alpha 即可Eigen::Matrix4f get_model_matrix(float rotation_angle){ Eigen::Matrix原创 2021-08-15 19:29:00 · 538 阅读 · 0 评论 -
SPOJ LCM Sum(Hard) 欧拉函数 + 换枚举对象
求 ∑i=1nLCM(i,n),(1≤n≤1e18)\sum_{i=1}^nLCM(i,n),(1\le n\le 1e18)∑i=1nLCM(i,n),(1≤n≤1e18) #include<bits/stdc++.h>using namespace std;#define IOS ios::sync_with_stdi原创 2021-03-20 22:53:13 · 126 阅读 · 0 评论 -
codeforces 1499E DP
给定两个串 xxx 和 yyy。定义 zzz 为从 xxx 串和 yyy 串的归并而成的字符串,归并顺序自定义,要求得到的 zzz 串相邻字符不相同。问你 xxx 和 yyy 的所有子串能构成 zzz 的方案数有多少种。 定义 dp[i][j][a][b][c]dp[i][j][a][b][c]dp[i][j][a][b][c],dp[i][原创 2021-03-19 13:44:14 · 122 阅读 · 0 评论 -
Codeforces 585E 莫比乌斯反演 + 容斥
给定 n(2≤n≤5e5)n(2\le n\le 5e5)n(2≤n≤5e5) 个数,2≤ai≤1e72\le a_i\le 1e72≤ai≤1e7。 一次操作中,从数组 aaa 中选定一个 xxx,再从剩下的数中选出一个 gcd>1\gcd>1gcd>1 的非空集合 YYY,使得所有选中的数的 gcd=1\gcd=1原创 2021-03-15 23:10:10 · 263 阅读 · 1 评论 -
CodeForces1473E 分层图 + 最短路
定义一条路径上的值为 ∑i=1kwei−maxi=1kwei+mini=1kwei\sum\limits_{i=1}^{k}{w_{e_i}} - \max\limits_{i=1}^{k}{w_{e_i}} + \min\limits_{i=1}^{k}{w_{e_i}}i=1∑kwei−i=1maxkwei+i=1minkwei,求 111 到每个点的路径的最小值。 &nbs原创 2021-02-17 23:52:14 · 299 阅读 · 0 评论 -
Codeforces 919E 中国剩余定理 + 线性时间求逆元 + 折半搜索
计算有多少 n(1≥n≥x)n(1\ge n\ge x)n(1≥n≥x) 满足n⋅an≡b(mod p)n\cdot a^n\equiv b(mod\ p)n⋅an≡b(mod p) a,b,p,x(2≤p≤106+3)(1≤a,b<p)(1≤x≤1012)a,b,p,x(2 \leq p \leq 10^6+3)原创 2021-02-03 16:10:53 · 130 阅读 · 0 评论 -
洛谷 P2387 [NOI2014] 魔法森林 LCT + 排序 + 枚举
每个点含有两种点权 a,ba,ba,b。问 111 到 nnn 的最小代价,最小代价定义为 111 到 nnn 的路径上的 amax+bmaxa_{max}+b_{max}amax+bmax。 我们按 bbb 排序,维护 aaa 的最小生成树。也就是我们考虑把排序后的边,逐个加入到最小生成树中。bmaxb_{max}bmax 已经固定了原创 2021-02-02 22:36:36 · 91 阅读 · 0 评论 -
洛谷 P4234 LCT + 排序 + 枚举
求边权最大值与最小值的差值最小的生成树,输出这个差值大小。 按权值排序,我们等同于枚举最大值,然后更新生成树让生成树的最小值尽可能最大。 也就是每次加入边,若构成环,则去掉环上最小值。 &原创 2021-02-02 21:52:11 · 143 阅读 · 0 评论 -
Codeforces 1467E DFS序 + 树上差分
题目大意为,定义合法的根:根到任意结点的路径上的点权唯一,求合法的根的数量。 我们很容易想到,合法的根的数量 = 总点数 - 非法根的数量。 对于任意点权相同的结点,只有它们之间的路径上的结点以及结点的子树才有可能合法,除此之外一定不合法。 &nb原创 2021-02-01 16:04:10 · 176 阅读 · 0 评论 -
Codeforces gym102471C 狄利克雷卷积性质 + 狄利克雷卷积计算
首先给出结论:(下述结论成立基于对 modmodmod 取模情况下)。 当 f(1)=1f(1)=1f(1)=1,fmod+1=ϵ(f(1))∗ff^{mod + 1} = \epsilon(f(1))*ffmod+1=ϵ(f(1))∗f,fmod=ϵ(f(1))f^{mod}=\epsilon(f(1))fmod=ϵ(f(1))。&nbs原创 2020-12-05 14:52:12 · 270 阅读 · 0 评论 -
Codeforces 1451F Nimm博弈变形
题目给定一个 n∗mn*mn∗m 大小的网格图,每个格子有一个非负整数。 每个人从一个非零格子作为矩形的左上角,将该格子的数减去一个非零值,其余矩形内的格子的数值任意变化(可不变),两人轮流操作,问先手后手赢? 当且仅当所有左斜对角线的异或值为 000 时,后原创 2020-11-28 23:01:34 · 184 阅读 · 0 评论 -
2018ICPC 南京 Mediocre String Problem 扩展KMP + Manacher
题目大意为计算 SSS 串的子串 sss 串和 TTT 中的前缀 ttt 串拼起来是回文串的种数的总贡献,要求 sss 串长度大于 ttt,s+ts+ts+t 是回文串,sss 和 ttt 串非空,拼起来的串视作不同种当且仅当 sss 或 ttt 串的位置不同。 我们把 sss 串分成 s1+s2s_1+s_2s1+s2 两个部分,其中原创 2020-11-04 13:41:33 · 106 阅读 · 0 评论 -
Codeforces 432D 后缀自动机 + 起始位置标记
这道题我用后缀自动机来写,就加个简单的标记数组,记录下串的结束位置,也就是该串的第一次出现位置。然后建 failfailfail 树,dfsdfsdfs 遍历。 子树代表的就是以当前结点的串为后缀的子串,那么我们从子树那里继承过来的最大 pospospos 也就是该结点的串的最后一次的出现位置,根据题意,我们找同时出现在前缀和后缀的字符串即可原创 2020-11-03 19:01:46 · 250 阅读 · 0 评论 -
CodeForces 1422F 线段树 + 主席树 + 卡常
首先 lcm(al,al+1,..,ar)=pimax(ki)pi+1max(ki)...)lcm(a_l,a_{l+1},..,a_{r})=p_i^{max(k_i)}p_{i+1}^{max(k_i)}...)lcm(al,al+1,..,ar)=pimax(ki)pi+1max(ki)...),也就是范围内的所有数的质因子的最高幂次的乘积。 &原创 2020-10-22 23:18:26 · 211 阅读 · 0 评论 -
洛谷 P3181 广义后缀自动机 + DFS序遍历
建立一个广义后缀自动机然后统计同一节点下 子串个数 * a串的节点出现次数 * b串的节点出现次数,利用 DFSDFSDFS 序遍历所有节点,在返回时将子节点的大小累计至父节点即可。#include<bits/stdc++.h>#define endl '\n'using namespace std;typedef long long LL;const int maxn = 8e5 + 5;cha原创 2020-10-14 16:17:04 · 71 阅读 · 0 评论 -
Lightoj 1356 分解质因数 + 二分图匹配
首先我们有一个定理:最大独立子集 = 结点数量 - 最大匹配。 然后这题关键就在于建图了,假设 a=prime∗ba=prime*ba=prime∗b ,我们考虑 a,ba,ba,b 中质因子个数为奇数的数连到质因子个数为偶数的数上面。(反正就是确定一个有向图方向,统一即可) &nb原创 2020-09-26 16:31:04 · 163 阅读 · 0 评论 -
Codeforces 1420 D 离散化 + 排序 + 树状数组
昨天看到题本来就能秒出的,结果组合式公式套错了。。。Cnm=PnmPmm=n!m!(n−m)!C_n^m=\frac{P_n^m}{P_m^m}=\frac{n!}{m!(n-m)!}Cnm=PmmPnm=m!(n−m)!n! 我们考虑先离散化 lll, rrr,因为如果我们想用树状数组维护的话,1e91e91e9 的数据显然是不原创 2020-09-25 13:39:35 · 144 阅读 · 0 评论 -
Codeforces 1405E 二分套树状数组 + 树状数组
给定一个序列,当 ai=ia_i=iai=i,也就是对应位置的数字等于下标时,可以删除这个数。然后该数之后的数全体前移一位。 于是我们很容易可以得到结论,令 fif_ifi 为前 iii 个数可以删的个数。当前数可以删除当且仅当 i−ai≤fii-a_i\le f_ii−ai≤fi,且总能找到一个方法删掉它(简单证明,当同时存在 ai原创 2020-09-19 00:22:12 · 146 阅读 · 0 评论 -
Codeforces 1406E 时间复杂度优化 + 思维
给你一个 nnn,要求你找到一个 1−n1-n1−n 以内的 xxx。给定三种操作, A aA\ aA a 查询当前有多少 aaa 的倍数,aaa 范围 1−n1-n1−n,B aB\ aB a 查询当前有多少 aaa 的倍数,并删掉所有除 xxx 外 aaa 的倍数,aaa 范围 2−n2-n2−n,CaC aCa,表示打印答案。 &原创 2020-09-14 13:10:57 · 219 阅读 · 0 评论 -
洛谷 P3346 广义后缀自动机 + 树上求字符串
题目给定一棵树,树上每个结点有一个特定的值,定义一个序列是任选两点 A,BA, BA,B(可以相同),AAA 点到 BBB 点之间的所有结点上的值构成的一个序列。若 A=BA=BA=B,自然这个序列长度就为 111啦。 题目问你有多少种本质不同的序列,有个小细节,题目说度为 111 的结点不超过 202020 个,这里我们就可以从所有的叶子结原创 2020-08-26 17:05:01 · 91 阅读 · 0 评论 -
洛谷 P3975 后缀自动机 + 建link树 + 字典树统计字符串个数
题目给定一个字符串 sss,指令 ttt, ttt 为 111 则不同位置的相同的串视作不同,为 000 则视作相同,问你字典序第 kkk 小的串。 首先按照 linklinklink 来建树,自下而上除 clonecloneclone 点外长度递减。我们标记所有 endposendposendpos 等价类,也就是插入的每个字符对应的状态,原创 2020-08-26 02:38:16 · 109 阅读 · 0 评论 -
LightOJ 1315 博弈 + SG函数 + 记忆化搜索
不懂 SGSGSG 函数的可以看我的博客 数学篇 ,这题给定一个无限大的二维平面,但是限制了左上角的位置,棋子的可行方向如图所示。 同样也是两人轮流移动多个棋子,无合法操作时输掉游戏,问你先手胜还是后手胜。 这题因为他的子状态到当前状态的递推关系不是线性的,原创 2020-08-22 16:55:58 · 149 阅读 · 0 评论 -
HDU 6868 莫比乌斯函数 + 找规律 + 记忆化离线处理
定义 f(n)=∑d∣n∣μ(d)∣f(n)=\sum_{d \mid n}|\mu(d)|f(n)=∑d∣n∣μ(d)∣,给定 n,mn,mn,m 求 ∑i=1mf(ni)\sum_{i=1}^mf(ni)∑i=1mf(ni),结果对 1e9+71e9+71e9+7 取模。 易得 f(n)=2w(n)f(n)=2^{w(n)}f(n)=原创 2020-08-20 02:42:26 · 199 阅读 · 0 评论 -
HDU 6791 Border 理论 + 回文自动机 + 树上倍增 + 双哈希
题目给定一个字符串,两个人都会选取其中一个回文串。接下来,构造一个新串,持续的添加字母,每个字母有等同的概率出现,问你谁选取的字符串最大可能最先出现。 介绍一下 BorderBorderBorder 理论。对于一个长度为 LLL 的序列 AAA,若 A[1, i]=A[L−i+1, L]A[1,\ i] = A[L - i原创 2020-08-17 19:04:32 · 251 阅读 · 0 评论 -
洛谷 P4762 回文自动机 + 线性动态规划
题目给定两种操作: 一、复制当前串并将复制后的串翻转,接至当前串末尾或头部(本质上是同一种操作) 二、添加单个字符至当前串开头或结尾。(本质上是同一种操作) 问你,最少几步操作原创 2020-08-16 18:13:11 · 155 阅读 · 0 评论 -
HDU 6833 莫比乌斯反演 + 数论分块
给定下列式子:∑a1=1n∑a2=1n...∑ax=1n(∏j=1xajk)f(gcd(a1,a2...,ax))⋅gcd(a1,a2...,ax)\sum_{a_1=1}^n\sum_{a_2=1}^n...\sum_{a_x=1}^n(\prod_{j=1}^xa_j^k)f(\gcd(a_1,a_2...,a_x))⋅ \gcd(a_1,a_2...,a_x)a1=1∑na2=1∑n...ax=1∑n原创 2020-08-15 19:13:39 · 152 阅读 · 0 评论 -
HDU 6850 博弈
首先,我们知道博弈的策略其实是把必输的策略留给对手。体现在这题中,就是当对手选中的边抵达最大边的一端时,然后我们选择最大边,则我们胜利。 那么我们就要想办法把最大边的一端留给对手,以此类推的,我们倒着标记最大边的两端。然后逐个标记,两端没有被标记的次大边,次次大边等。当我们的第一个点被标记时,我们就获得了游戏胜利。 &原创 2020-08-14 00:34:58 · 149 阅读 · 1 评论 -
洛谷 P2414 AC自动机 + fail树按dfs序求区间和
题目给定一个字符串,若为小写字母则表示加入该字符。若为 PPP,则打印当前字符串,并换行(打印后当前字符串不变)。若为 BBB ,则删除当前字符串的最后一位。给定 mmm 次查询,问你第 xxx 次打印的字符串在第 yyy 次中出现了几次。 首先我们清楚一点,在 ACACAC 自动机中的 failfailfail 树上,当 aaa 可以通过原创 2020-08-09 16:19:11 · 136 阅读 · 0 评论 -
洛谷 P2336 AC自动机 + 暴力
给你 nnn 个猫的姓和名两个字符串,点 mmm 次名,当点名为该猫的姓或名的子串时,猫猫答到。问,每次点名,几只猫答到,每只猫答到几次。 两个坑点,1.姓和名点到只算一次,所以我们要用分隔符将他隔开,将姓和名并在一起同时查询。2.字符串的字符种类多达1e4种,所以我们要开 mapmapmap 优化,把字符 hashhashhash 一下。并原创 2020-08-08 20:39:40 · 157 阅读 · 0 评论 -
Codeforces 1385F 仿写SPFA
给定一棵无根树,每次删除属于同一父节点的 kkk 个叶子,问最多删几次。 这题贪心的从叶子出发往上删即可,关键是如何实现。我们记录下结点的出度,然后记录该结点的父节点下的叶子数量。最初将叶子数量大于等于 kkk 的结点加入队列,然后贪心的删除该结点对应数量的叶子结点后,判断该结点是否为叶子结点,将其父节点叶子数量加 111 。 &原创 2020-07-19 15:09:45 · 93 阅读 · 0 评论 -
Codeforces 1385E 两遍拓扑排序
题目给定一个含有无向边和有向边的图,让你决定无向边的方向使得图无环。如果可以打印方案,如果不行,输出 NONONO。 对于有向边,我们反向建边。无向边则同时建边。我们按照拓扑排序,从出度为0的点出发,决定无向边的方向。同时把有向边的另外一端的顶点出度减一。简单理解,拓扑排序从出度为0的点出发,那么若连接出度为0的点,走到该点也是死路一条,故可原创 2020-07-19 00:10:08 · 137 阅读 · 0 评论 -
Codeforces 1380G 费马小定理求逆元
题目给定两种箱子,一种给你一定数量金币,一种吃掉你所有金币。然后你要安排箱子顺序,使得获得的金币期望最小。问你放 111 到 kkk 个吃金币箱子的排放所能得到的最小期望。结果取模。 贪心的想,吃金币的箱子肯定放金币多的。然后我们均匀摆放其他拿金币的箱子。使得期望最小。除法取模就求一波逆元相乘即可。 &nb原创 2020-07-17 19:44:46 · 128 阅读 · 1 评论 -
Codeforces 1380E 并查集+考察时间复杂度分析
题目给定 nnn 个汉诺塔,就是大的数字不能放在小的数字上面。定义合并所有汉诺塔的最小代价为 diffdiffdiff。给你 mmm 个操作,每次操作合并两个存在的塔,要你输出每一次操作之前的 diffdiffdiff 是多少。 这一题是我通过观察样例分析出来,将每个塔内连续的数字视作一个集合,并查集合的数量 - 1 就是答案 diffdif原创 2020-07-13 21:51:00 · 476 阅读 · 0 评论 -
Codeforces 1380D 贪心
两种操作,一种将长度为 kkk 的序列消除(删 kkk 个数),一种除去指定的连续两个数字中小的那个(删一个数)。 首先简单判断一下 bbb 是不是 aaa 的子序列,顺便记录下所有要删除的部分。 然后对于长度小于 kkk 的部分,我们只能选择单删,问题就是要原创 2020-07-13 01:49:46 · 196 阅读 · 0 评论 -
Codeforces 1372D 贪心
这道题我比赛的时候竟然没做出来。。。太菜了。。。 题目给定 nnn 个数字( nnn 为奇数),围成一圈。每次操作去掉其中一个数,再将这个数字的相邻两个数字合并起来。重复操作直到只剩一个数字,问你最后得到的最大的数是多少。 我们这样分析,合并的操作一定是 n−原创 2020-07-12 20:47:14 · 178 阅读 · 0 评论 -
Codeforces 1370E 二分又二分
仔细分析我们可以发现,sss 和 ttt 相同的地方不需要考虑。我们只需要分别记录下不同的地方中,sss 为 1 的位置 sidsidsid 以及 ttt 为 1 的位置 tidtidtid。 然后我们贪心的想,一步移动中,最多移动的次数,也就是 tidtidtid 的左侧的不同的 sidsidsid 的个数。每一次我们就把这些 sidsid原创 2020-07-11 18:52:42 · 67 阅读 · 0 评论 -
Codeforces 1216F 线段树维护区间最大值
给定 nnn 个房间,为 111 的房间 iii 中的 Wi−FiWi-FiWi−Fi 可以覆盖 max(1,i−k)max(1, i − k)max(1,i−k) 到 min(n,i+k)min(n ,i + k)min(n,i+k),为 000 的房间只能覆盖自己。房间 iii 装 Wi−FiWi-FiWi−Fi 的代价为 iii, (1⩽i⩽n)(1\leqslant i\leqslant n)(1⩽i⩽n)。问你原创 2020-07-11 15:52:20 · 246 阅读 · 0 评论 -
Codeforces 1375E 维护逆序对
题目大意,让你用所有的逆序对的下标,按一定顺序排序。要求原序列通过交换你排序后的逆序对,能得到一个排序好的序列。 举例来说: 输入: 5 &原创 2020-07-09 17:11:01 · 167 阅读 · 0 评论