小白Git极简9步入门 把想改的代码先fork到个人仓库先创建个空文件,git init声明是git管理把这个项目git clone到我的文件夹git status,git branch查看分支,该在哪改在哪改,git checkout该换分支换分支然后在这个文件夹内部进行修改,进行git;修改成功之后,先git status,再git add .再git commit -m “msg”提交本地仓库git remote add XXX,先添加远端仓库地址,不然你咋交到github呢。
Pycharm根目录 如果你想在 PyCharm 中设置当前文件的根目录,可以在 PyCharm 的配置中指定一个 Working directory,该目录将作为项目的根目录。可以通过在菜单栏中选择 Run > Edit Configurations 并在打开的对话框中指定 Working directory 来设置。在 PyCharm 中,当前文件的根目录默认是包含该文件的项目目录。如果当前文件在项目目录的子目录中,那么该子目录就是当前文件的根目录。文件并运行它,那么它的根目录就是。如果你在 PyCharm 中打开。
P3174 [HAOI2009] 毛毛虫 分析:很容易想到:f[u] 是 u 为当前子树根节点的毛毛虫头时子树内毛毛虫最大点数。但当时其实最大的疑问在于:如何选根节点 —— 假设选到了一个不在最终答案上的点座位根节点dfs,咋办?题意:给你一棵树,取出一根链和与链相邻的“脚”;问能取出的最大节点数是多少?但我们发现实际上维护每个当前点的【最大 + 次大】即可;点4显然不会在最终的链上。当时到这里就想不下去了。
F. Dasha and Nightmares (异或hash 分析:线性枚举,统一算贡献,发现当枚举过去的时候,没后效性,所以只要算出枚举到当前情况之前的累计,发现没法直接查询,这里就要想到用 hash 压缩表示状态;然后对于每一个位置是空的要单独算;题意:给你 2e5 个字符串,总长不超过 5e6 ,输出多少对字符串两两组合之后,满足 1.长度是奇数 2.不同的字母恰好25个 3.每个字母出现次数都是奇数;
C. Serval and Toxel‘s Arrays(容斥+按值算贡献 分析:由于确保两两必然不同,很好想到这题的关键在于值而非位置,对于每个值算贡献 —— 因为同样的值,产生贡献的情况要不是 1 ,要不是 2,对于合并后数组内有两个相同值的贡献很好算 —— 就是。题意:一个 n 长的值成对不同数组,有 m 次变化,每次执行一次 p 位置,改为 v 值【保证每次改完的数组内的值成对不同】,计算所有 m + 1 的数组两两去重合并之后不同的数的个数的和;所以最终就是 总数减去重复计算的。
G2. Teleporters (Hard Version) 【二分 分析:首先发现每个点实际的贡献就是(min(a[i] + i, a[i] + n - i + 1)),但是不能直接排序算,因为我们必须从 0 号点出发,第一个位置是独立的,思考了一会没啥办法,无奈只能将这一维枚举,再考虑如何用 logn 的时间复杂度算出每个起点的最大个数,一开始想着用个堆维护一下,但复杂度太高,再想着离线,排序之后,再利用单调性二分再降复杂度,直接排序后前缀和处理好直接二分。然后再特判一下开头点是否在二分后的区间就好了。
D. Chat Program(22南京 分析:真的很惭愧,当时看到第 K 大,一眼数据结构,直接跑偏了,想了半天(明知不对就不能再硬想了)。本来这样就不是正确的思考方式。对于最大值,考虑二分,对于第K大,只要处理后区间>=mid的个数多于K个即可,正常做肯定是 nm 的,想着优化肯定就是要优化掉 等差数列 那个复杂度,思考一下就能知道,每个位置能直接算出覆盖区间,所以在枚举的时候直接算出左右端点,最后跑一遍前缀和即可;题意:给一个 n(2e5)长的数组,再给一个等差数列,问最多执行一次(添加等差数列)后的最大第 K 大是多少。
E. Explosions?(思维+单调队列 得明白两个事:预处理每个数减去坐标之后,只要不减就一定是能满足的,所以对队尾如果比当前的大,那么要减去长度*差值——使满足不减的性质【把山峰不断削平的一个过程】;然后还得处理队头,这里我有个一直想不明白的点:为啥只要处理队头就行了 —— 是因为如果有上一步的合并操作,有可能会使得长度超过他本身的最大长度(本身就是。分析:略加思考会想到实际上就是找一个最大的金字塔,两侧都是平原,但实际上并不完全是,因为两侧斜率可以不一样;,你有两种操作,一种花费 1 MP减少一个怪的一格血量,可以操作任意次;
D. Game on Axis 【思维(1900 如果点 1 可以走到终点 n+1,那么 1)不在 1 路径上的点随便怎么样都行,2)其他的点不能走到他的后继(这里我们发现从 n+1 反向建边,x+1个点,x条边,必然是一个树,所以反向树形DP一下,减去子树即可)如果 1 不能走到终点 n+1 ,分别思考 1 成链和成环 的情况,发现都可以总结为考虑 1 往前的路径的点,这些点1)要不超出本身,2)要不连到树上;分析:很好想到建图,把不在范围内的路径全连到 n+1 点上,然后分类讨论。,每次从1出发,可以执行一次操作(题意:n个数字,规定跳跃规则为。
E. The Harmonization of XOR(异或构造 2100 但是后面一下子就不知道如何构造了,所以解题的关键点还是要发现思考的方向,【问题的关键取决于最大能构造的个数】,同时我们也会发现如果第一个条件是满足的情况下,那么构造一个确切的个数只要把剩下的全部放在一起就行了(利用了异或的性质);开个桶就行,所以是利用异或性质贪心构造,一开始想偏了;题意:给你三个参数n,k,x;也就是n长的排列,要构造出k个序列满足不相交且异或值恰好为x,不满足输出NO。分析:当时马上就能想到首先这个不满足的条件之一就是根据奇偶性和1~n的所有异或值累异或,如果不等直接NO;
D. Tournament Countdown 【交互+分治优化(1800 但是这个不满足,考虑分治优化(个人思路,可以类比冒泡排序和归并排序的思路,线性可以分治优化,这个还是很妙的),发现如果当只剩两个的时候,直接一次询问即可,剩四次的时候,发现只要两次即可;个人按顺序就排列,两两进行锦标赛,每次可以询问两个人,然后可以知道谁赢的多(或者一样多)。分析:首先有个很直接简单的思路就是从1开始询问,不断的找出赢场最大的那个人,复杂度是。
E. Arithmetic Operations 根号分治 的,一维枚举起始位置,一维扫过去,发现暂时没法优化,所以转变思路,看能否换个枚举方式,转而枚举 d(差值),同时发现如果差值大的话,完全不需要枚举完整个数列。(我当时还想着是枚举位置,再枚举位置),但实际上,完全可以利用等差公式根据位置推到。感觉分块目前见到的有对序列分块,对值域分块,对询问分块。马上想到根号分治,对值域分治,对于大于根号 k 的差值,只需要枚举根号的长度即可,这里的复杂度是。的众数是多少,由于再加个 log 会 T,所以开个桶解决【对于小于根号的处理方式跟这题。