题解
狼队.Modest
腾讯工程师
展开
-
P1045 [NOIP2003 普及组] 麦森数 题解
与 有着相同的位数,因为2的次方满足了最后一位不为零的要求,所以减一后位数并不会改变,那么我们可以直接求 的位数。我们不妨设 ,根据 的位数为 ,我们只要想办法把 中的底数2改为10,指数加一就是位数了。根据乘方的原理,将p乘进去,原式便可化为我们最终想要的形式 了,所以位数就是。这个绝对难不倒大家,裸的高精快速幂,经过NOIP2017初赛的RP++后,相信很多人都已经会了快速幂了,所以我在这里不再赘述,只是提供一种相对较为简便的高精乘法(见程序)二、求最后500位数。原创 2022-09-16 19:54:01 · 294 阅读 · 0 评论 -
P1049 [NOIP2001 普及组] 装箱问题
在我们学习动态规划之前,拿到这道题,大部分人首先的思路是贪心,即每次选择体积最大的装入箱中。原创 2022-09-16 19:49:33 · 383 阅读 · 0 评论 -
P5661 [CSP-J2019] 公交换乘
用算法分析历年CSP考题原创 2022-09-16 19:46:06 · 531 阅读 · 0 评论 -
P1422 小玉家的电费 题解
题解原创 2022-06-28 10:31:45 · 230 阅读 · 0 评论 -
P2837 [USACO08FEB]Dining Cows B 题解
怎么感觉没几个题解是写DP的呢?难道这真的是道假DP?如果用DP其实很好想啊,用dp[i][0]表示第i头奶牛为1时需改的最小数量,dp[i][1]表示第i头奶牛为2时需改的最小数量,如果第i头奶牛原来为1,则dp[i][0]=dp[i-1][0],dp[i][1]=min(dp[i-1][1],dp[i-1][0])+1,然后原来为2的情况以此类推啦~最后只要比较dp[n][0]和dp[n][1]就行了。#include <iostream>#include <cst原创 2022-01-14 15:25:45 · 1463 阅读 · 0 评论 -
P4708 画画 题解
去年差不多这个时间弄出的题,感觉这道题还是比较有灵性的。自己写个题解。先考虑一个辅助问题: n 个点的无标号图的个数 ans 。网上资料很多。直接套用 Burnside 引理,枚举点的置换(一种点的置换对应 ans * n! 种带标号方案的置换,这才是实际枚举的东西),可以将点划分为若干个循环节,考虑每个循环节内的点可以怎样连边,以及两个循环节间的点可以怎样连边。发现循环节大小的多重集合相同时,累加量一定,所以只需要枚举分拆方案,再乘上这个分拆方案对应的置换个数。现在回到这个问题。同样的,我们枚举循原创 2021-10-10 12:40:48 · 129 阅读 · 0 评论 -
P1063 [NOIP2006 提高组] 能量项链 题解
简单的说:给你一项链,项链上有n颗珠子。相邻的两颗珠子可以合并(两个合并成一个)。合并的同时会放出一定的能量。不同的珠子的合并所释放的能量是不同的。问:按照怎样的次序合并才能使释放的能量最多?我们用top表示第i颗珠子的头标记,用wei表示第i颗珠子的尾标记,合并两颗相邻珠子所释放的能量是:Q=top*wei*wei[i+1Q=top∗wei∗wei[i+1]或top*top[i+1]*wei[i+1]top∗top[i+1]∗wei[i+1];(一个样的)合并不一定按顺序的,本题所提供的.原创 2021-09-30 20:53:58 · 450 阅读 · 0 评论 -
【水】【违规不自杀】警惕新型校园欺凌
请注意!新型校园欺凌包括但不限于以下几个表现:1.在初中学校中,于黑板写下微积分相关知识2.给同学拿初中数论题跟同学说是因式分解题(注:初中数论题指学而思北京总部数学初中集训队的数论题目)3.尝试给同学推销膜你抄和OIdiary等歌曲4.尝试向同学讲述OI相对高级的算法,例如网络流和splay等5.给同学讲题的时候以“显然”“易证”“不难看出”等贯穿全文6.尝试使用导数等知识做初中题目7.尝试在动点压轴建立平面直角坐标系或用向量表示线段8.尝试给初中同学讲述万有引力圆周运原创 2021-09-23 21:28:19 · 124 阅读 · 0 评论 -
P1028 [NOIP2001 普及组] 数的计算 题解
好吧,这道题有两种解法第一种估计是大家一下子就想到的:暴力递归!!(很明显不是正解)粘一个我的代码#include<cstdio>using namespace std;int n,cnt=1;void func(int x){ for(int i=1;i<=x/2;i++){ cnt++; func(i); }}int main(){ scanf("%d",&n); func(n);原创 2021-09-23 21:22:32 · 199 阅读 · 0 评论 -
P2841 A*B Problem 题解
这道题只有一个P党的题解,那我就来一发C++的吧,习惯用指针,虽然代码可能写的不是很规范(变量想不好取什么名字),第一次写题解,请多见谅本题刚看的时候想随便想个算法,然后发现###要爆long long写高精太麻烦,咋办,偷个懒,到最后再化成高精吧一个贪心(贪心?也许不是)假如有两个数模A余数相等,那就取小的那个所以理论状态小于10000BFS一发,别忘了最高位取0也要更新状态,以便于到时候输出的时候能正确的回溯,输出好吧,讲的不多,贴一波代码#include<cst原创 2021-09-23 21:17:38 · 183 阅读 · 0 评论 -
P1046 [NOIP2005 普及组] 陶陶摘苹果 题解
好好的一道splay题,怎么能水过去呢我们将所有苹果高度插入一个splay中我们要找到不高于陶陶手的苹果数量,就插入一个陶陶的高度 + 1的节点作为 哨兵 ,将其splay到根,那么它左子树的大小就是所求贴一个优美而不失简洁的splay#include<cstdio>#define ls ch[u][0]#define rs ch[u][1]#define isr(u) (ch[fa[u]][1] == u)const int maxn = 15;inline int原创 2021-09-23 21:14:25 · 222 阅读 · 0 评论 -
CSP j/s组答案(初赛!)
试题链接见题目附件。upd:官方答案,感谢 @xhgua 提供。答案来自洛谷管理组,斜体字部分代表不确定。1-5 ABACC 6-10 CCBDA 11-15 ACCCB读程序 1:TFFT DC读程序 2:TFF BCB读程序 3:FTF BDD完善 1:DADC完善 2:ADADDC文字版解析不知道会不会有,咕咕咕。统一回复:阅读程序第二大题最后一题为什么不是2424:第一个1010是nn。本贴禁止无意义回复,允许纠错或者题目讨...原创 2021-09-23 12:17:37 · 539 阅读 · 1 评论 -
P1049 [NOIP2001 普及组] 装箱问题 题解
我要用模拟退火来做这道题这道题真的太没意思了,模板3分钟敲完查错都不查都能AC。我不会告诉你我第一次交测评把数据范围看错了甚至丢了20分所以我决定弄点其他好玩的。之前见过有仁兄直接用O(1e6)的随机跑dp得了90分,这件事给我留下了深刻的印象。然后,我受到了极大的启发。考虑一下背包问题,我们可以很容易地发现其可以与模拟退火相类比。 至于什么是模拟退火,我太懒了无法在这里详细讲解,所以请移步吊打XXX的题解,以及各大牛的CSDN博客等。这里用模拟退火做的正确性是显然的。简而言之,模拟退火就是一.原创 2021-09-22 21:04:08 · 302 阅读 · 0 评论 -
P1026 [NOIP2001 提高组] 统计单词个数 题解
没有人用STL的string吗???来一发。。。所用函数(string s,a;): s.s ubstr(x,len) 在s中取出从x位置开始,长度为len的字符串,并返回string类型的字符串。 s.find(a) 在s中查找字符串a,并返回起始下标(从0开始),若不存在,返回1844674407370955161,即(1999999999999999)16. s.length() 求s的长度(从0开始)。 s[1] 字符串s的第2个字符,相当于数组(后原创 2021-09-22 21:00:51 · 194 阅读 · 0 评论 -
P1042 [NOIP2003 普及组] 乒乓球 题解
_这个题其实还是需要一点乒乓球比赛的尝常识:当一方比分率先达到11分(或21分)时,只有分差大于或等于2分才会开始下一局。_细节处理:读到“E”时退出while,并输出当时比分;两组数据中间要把比分归零。#include<iostream>using namespace std;char ch;bool g[1000000];//记录比分,true表示华华胜,false表示输; long long a,b,num;//a,b存储比分; int main(){ whi原创 2021-09-18 12:26:37 · 555 阅读 · 0 评论 -
P1037 [NOIP2002 普及组] 产生数 题解
此题正解为DFS(n扩大到10^100000也不会超时)原因:Floyd的时间复杂度为O(n^3),此处n为10(表示0-9每个数字)DFS的理论时间复杂度为指数级,即O(2^k),但本题中每个数字只搜索一次,重复的直接return,因此每一位实际的时间复杂度仅为O(n)本题中注意整数n要用字符串读入,用long long会爆,用int128代码#include<bits/stdc++.h>#define lll __uint128_tusing namespace原创 2021-09-18 12:13:49 · 370 阅读 · 0 评论 -
P1021 [NOIP1999 提高组] 邮票面值设计 题解
我们有一个洛谷团队,希望大家加入:LIOI出题组原创 2021-09-07 12:02:35 · 293 阅读 · 0 评论 -
P1035 [NOIP2002 普及组] 级数求和 题解
在算模拟做法(做法1)的时间复杂度时,我想到了一种新的数论做法(做法2),检查了一遍题解发现没有这种做法,于是我写了这篇题解。1.模拟这种做法的思路是枚举nn从1开始,直到Sn>kSn>k结束,只需要一个循环即可实现。代码:#include<cstdio>int main() { int k,n=0; scanf("%d",&k); for(double Sn=0;Sn<=k;++n,Sn+=1.0/n); print原创 2021-09-18 12:03:08 · 674 阅读 · 0 评论 -
P1028 [NOIP2001 普及组] 数的计算 题解
以前一直很肤浅的认为这道题就是纯靠模拟就解决了。如今学了DP了,细细思考,原来是可以用递推来解决的。思路:递推到i个数的解,就是枚举第i个数的二分之一到0初始化呢, 就是f[0]=0;这道题可以归于 用DP求方案数类型。#include<iostream>#include<cstdlib>#include<cstdio>using namespace std;const int maxn=1000+2;int n;int f[ma原创 2021-09-18 11:59:18 · 108 阅读 · 0 评论 -
P1011 [NOIP1998 提高组] 车站 题解
数学思考题看下面的表\ \ \ \ \ \ \ \ \ \ |\ 1\ |\ 2\ |\ \ \ \ 3\ \ \ \ |\ \ \ \ 4\ \ \ \ \ |∣1∣2∣3∣4∣上车人数|\ n\ |\ b\ |n+b\ |n+2b|∣n∣b∣n+b∣n+2b∣下车人数|\ 0\ |\ b\ \ |\ \ \ \ b\ \ \ \ | \ n+b\ |∣0∣b∣b∣n+b∣车上人数|\ n\...原创 2021-09-17 21:19:32 · 470 阅读 · 2 评论 -
P1003 [NOIP2011 提高组] 铺地毯 题解
本题直接搜索貌似会TLE,于是可以扫每一个给出的方格,查看所查点是否在范围内,不断叠加并记录即可。代码如下:#include <iostream>#include <cstdio>using namespace std;int n,nx,ny,ans=-1;int sx[10001],sy[10001],lx[10001],ly[10001];bool yn(int x,int y,int lx,int ly){ if(nx>=x &&am原创 2021-09-17 12:12:50 · 123 阅读 · 2 评论 -
P6583 回首过去 题解
2333333333考虑首先合法的答案一定是分数约分后分母的质因数只有2,52,5。也就是说\frac{x}{y}=\frac{\frac{x}{\gcd(x,y)}}{2^p5^q}yx=2p5qgcd(x,y)x其中p,qp,q都是极大的。稍微化一下可以发现y=\gcd(x,y)\times 2^p5^qy=gcd(x,y)×2p5q那么就可以对每一个yy求有多少个xx是合法的。考虑xx一定可以写作d\times \gcd(x,y)d×gcd(x,y),那么...原创 2021-09-17 12:05:51 · 128 阅读 · 1 评论 -
T198684 小胖邮递员
#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<queue>using namespace std;const int BIT = 177147+10;int n,m;int scan(){char cc = ' ';int re = 0,fh = 1;while(cc == ' ' || cc == '\r' ||.原创 2021-09-01 20:39:09 · 72 阅读 · 0 评论 -
P1002 [NOIP2002 普及组] 过河卒 题解
一道比较入门的 dp 题这道题初始位置是从 0 开始的,这样不是很利于我们解题,所以不如暂且把这题里涉及的坐标统统 +1,那么初始位置就从(0,0)(0,0)变成了(1,1)(1,1)先考虑如果没有任何马的限制,卒子可以随便向右向下走,那么可以想到,一个卒子只能从 当前格子的左侧格子 和 当前格子的上方格子 上走到当前格子。那么假设从(1,1)(1,1)走到 当前格子的左侧格子 的路径条数是xx,从(1,1)(1,1)走到 当前格子的上方格子 的路径条数是yy,那么从(1,1)(...原创 2021-08-30 09:55:01 · 322 阅读 · 2 评论 -
P1014 [NOIP1999 普及组] Cantor 表 题解
算法1:模拟,按题意一个个枚举时间复杂度O(n),可以通过本题n≤10^7算法2:发现Z字形的每条斜线可以快速枚举,即枚举1/1 , 1/2 , 3/1 , 1/4 , 5/1 , 1/6……找到要求的第n项所在斜线,再一个个枚举或计算得出答案时间复杂度O(√n),可以通过n≤10^14算法2.5:枚举第n项在哪一行,计算得出答案,比算法2好写,时间复杂度同算法2算法3:发现第i条斜线(即分子分母之和=i+1的所有项)中包含i*(i-1)/2+1至i*(i+1)中的每一项,所以可原创 2021-08-30 09:51:36 · 230 阅读 · 0 评论 -
P1497 木牛流马 题解
思路:先考虑摆放的位置,再考虑颜色这里要运用到两个小学的知识点(摘自百度):排列的定义: 从nn个不同元素中取出m(m≤n)m(m≤n)个元素的所有排列的个数,叫做从nn个不同元素中取出mm个元素的排列数,用符号A(n,m)A(n,m)表示。计算公式:A(m,n)=\prod_{n-m+1}^{n}=\frac{n!}{(n-m)!}A(m,n)=n−m+1∏n=(n−m)!n!组合的定义:从nn个不同元素中取出m(m≤n)m(m≤n)个元素的所有组合的个...原创 2021-08-30 09:38:54 · 287 阅读 · 0 评论 -
P1001 题解
题目很简单,我们直接上代码#include<bits/stdc++.h>using namespace std;int main(){long long a,b;//这里用不用long long都没问题。cin>>a>>b;cout<<a+b;return 0;}原创 2021-08-25 10:42:10 · 113 阅读 · 2 评论 -
P7791 [COCI2014-2015#7] TETA 题解返回题目
题意简述 给出nn道菜及其价格。 其中有四种不重复的菜可以组成一份套餐,价格为cmpcmp。 给出需要买的菜品,其中,不在套餐中的需要单付,在套餐中的可以选择以整个套餐的价格支付部分套餐中的菜或每个菜都选择单付,求支付的最小金额。 套餐可以不限量地买,但每个套餐中只能有同种菜品中的一道菜(坑点)。 题目分析 当菜品不在套餐中,ansans直接加上单价。 当菜品在套餐中,则在sumsum数组中记录该种菜品的数量。 在mpmp...原创 2021-08-25 10:25:12 · 226 阅读 · 0 评论 -
P7776 【模板】特征多项式 题解
定理:相似矩阵特征多项式相同。证明:|\rm PAP^{-1}-\lambda E|∣PAP−1−λE∣=|\rm PAP^{-1}-\lambda PP^{-1}|=∣PAP−1−λPP−1∣=|\rm (PA-\lambda P)P^{-1}|=∣(PA−λP)P−1∣=|\rm P(A-P^{-1}\lambda P)P^{-1}|=∣P(A−P−1λP)P−1∣=|\rm P(A-\lambda E)P^{-1}|=∣P(A−λE)P−1∣=|\rm P|\times|A-\lambd原创 2021-08-25 10:21:06 · 1092 阅读 · 0 评论 -
P7772 [COCI 2009-2010 #2] FAKTOR 题解
题目:P7772 [COCI 2009-2010 #2] FAKTOR这题是一个数学题,我们可以直接算出来。由于会向上取整,让NN最小的话。那么\left\lceil\dfrac{N}{A}\right\rceil⌈AN⌉最好是I-1I−1点几。所以,我们先A\times(I-1)A×(I−1),但是这会使得I=I-1I=I−1,所以还要再加11,这样向上取整就成II了。那么N=A\times(I-1)+1N=A×(I−1)+1。代码就很简单了(就像P1001一样):...原创 2021-08-25 10:18:41 · 267 阅读 · 0 评论 -
P7825 「RdOI R3」VSQ 题解
很明显O(n\sqrt{n}\log n)O(nnlogn)的算法无法通过如此大的数据范围,我们考虑是否存在O(n\log^2n)O(nlog2n)的算法。首先我们想到构造一个长度为n-1n−1的0101串bb为b_i=a_i\ xor\ a_{i+1}bi=aixorai+1。这样,长度为k-1k−1且全为11的bb的子串就代表了一个长度为kk的 VS 串。我们考虑如何去维护bb数组,先看如何查询。设极长连续串l,rl,r为\forall ...原创 2021-08-24 18:53:03 · 183 阅读 · 0 评论 -
P1009 [NOIP1998 普及组] 阶乘之和 题解
其实这道题用二维数组做高精会更好理解(也好打一些),奇怪为啥没这么打的(当然啦,有一点点浪费空间(也就2M?))首先我们发现,求的是1到n所有阶乘的和,而阶乘又有递归写法(n!=(!n*n))那么直接用递推一直推到!n,然后再把所有的都相加就可以了(当然是倒序存储)关于进位:单个数组位置只存一个(其实可以多个)数位,乘了之后做操作的时候只需要判断当前位置是否是该行最后一位,如果是就++,那么它会一直循环到刚好合适为止。代码如下(拒绝复制,共创和谐CSDN)#include<ios原创 2021-08-23 14:58:05 · 355 阅读 · 0 评论 -
P1295 [TJOI2011]书架 题解
发个O(n)的题解先写个dp方程f[i]=f[j]+max(a[j+1]...a[i])(s[i]-s[j]<=m)对于转移方程可行的j且a[j+1]<=max(a[j+2]...a[i])f[j]+max(a[j+1]...a[i])与f[j+1]+max(a[j+2]...a[i])后半段相同易知f[j]<=f[j+1],所以前者更优推广可得最优转移一定在a[q1]>a[q2]>a[q3]>a[q4]>...>a[qj]中f[a[q原创 2021-08-23 10:21:30 · 140 阅读 · 0 评论 -
P7788 [COCI2016-2017#6] Savrsen
这里是题目传送门。这道题目的意思是定义f(x)f(x)为xx减去其因数之和的绝对值,给出一区间[a,b][a,b],求f(a)+f(a+1)+...+f(b)f(a)+f(a+1)+...+f(b)之和。首先,我们可以算出[1,b][1,b]的每个数的因数之和,存在数组vv里,然后再从aa至bb遍历一次,把每个数的因数和与其本身相减取绝对值,最后输出就可以了。注意:必须每次相减时都取绝对值,如果等至输出时再取绝对值可能会存在相加时正负抵消的情况,导致出现错误的答案。代码...原创 2021-08-23 09:50:35 · 503 阅读 · 0 评论 -
P7826 「RdOI R3」RBT
预处理 DFS 序\operatorname{dfn}(i)dfn(i)和每个节点的子树中 DFS 序最大值\operatorname{low}(i)low(i),将树上问题转化为序列问题。我们可以把「出现次数为奇数」转化为异或操作,考虑分块,在每个块内维护一个bitset,每一个二进制位代表[0,p)[0,p)范围内的一个整数,维护块内异或和即可。对于11操作,我们可以将bitset整体左移vv位,对于大于pp位的部分截断并移至最低位。 对于22操作,直接暴力重构整个...原创 2021-08-23 09:44:41 · 133 阅读 · 0 评论 -
P7834 [ONTAK2010] Peaks 加强版 题解
下面称Kruscal建树的时候的产生的点的权值为 “权值”,题目中给的点权称作 “贡献”。先是对于原图跑最小生成树的同时建立Kruscal重构树 随后 dfs 遍历整棵树,维护好倍增数组以及给叶子节点(原图节点)编号,并且处理出每个非叶子节点uu为根的子树中包含的叶子节点的编号 最大 / 最小值。 按照编号的顺序将叶子节点的 "贡献" 插入主席树中。 查询的时候就倍增找到询问的点uu在树中最远的一个满足权值\leq x≤x的节点pp(因为深度越浅,权值越大),它为根的子树里面...原创 2021-08-23 09:42:03 · 188 阅读 · 0 评论 -
P4557 [JSOI2018]战争 题解
一、概述学习此内容需一定计算几何基础,出门右拐:https://www.cnblogs.com/xzyxzy/p/10033130.html官方定义:两个图形A,BA,B的闵可夫斯基和C=\{a+b|a\in A,b\in B\}C={a+b∣a∈A,b∈B}通俗一点:从原点向图形A内部的每一个点做向量,将图形BB沿每个向量移动,所有的最终位置的并便是闵可夫斯基和由于博主太菜,本文只讨论凸包的闵可夫斯基和如下图,粉色区域便是三角形和一个不规则四边形的闵可夫斯基和二、怎么.原创 2021-08-20 17:12:26 · 189 阅读 · 0 评论 -
P4565 [CTSC2018]暴力写挂 题解
感谢i207M神犇教我的边分树Orz这题让我们求这个:ans=max_{x,y}\{deep_x+deep_y-deep_{LCA(x,y)}-deep'_{LCA'(x,y)}\}ans=maxx,y{deepx+deepy−deepLCA(x,y)−deepLCA′(x,y)′}然后这式子里带了2个LCA不好处理,给他变形:ans=\frac 1 2max_{x,y}\{dis(x,y)+deep_x+deep_y-2deep'_{LCA'(x,y)}\}ans=21maxx原创 2021-08-20 17:04:51 · 201 阅读 · 0 评论 -
P1173 [NOI2016] 网格 题解
一个显而易见的性质是答案不大于2(角上的跳蚤最多与两个相邻)继而发现答案其实只可能是-1,0,1,2~~(废话)~~,分类讨论:-1:nm-c<2nm−c<2或者nm-c=2nm−c=2且剩下的两只跳蚤相邻;0:原图不连通;1:原图联通且有割顶;否则为2。但n,m\le 10^9n,m≤109这种数据范围肯定不能直接做了,发现只有蚱蜢周围的跳蚤可能是割顶,是不是可以把它们选出来建图呢?.**.*#.**中间的*成为假的割顶。因此,我们要向外扩展两圈,然后原创 2021-08-20 16:55:28 · 461 阅读 · 0 评论 -
P4839 P哥的桶 题解
看到题:单点插入?区间查询?线段树。异或和最大?线性基。于是就可以线段树套线性基了。线段树每个结点维护一个线性基,插入时直接插入,查询时把所有被查询区间所包含的区间的线性基插入到一个大的线性基里,最后在大的线性基里查询就好了。时间复杂度O(nlogmlogx)O(nlogmlogx)#include <bits/stdc++.h>using namespace std;struct lb{ int a[32]; void insert(int x)原创 2021-08-20 16:16:38 · 123 阅读 · 0 评论