TopCoder
ymzqwq
这个作者很懒,什么都没留下…
展开
-
TopCoder SRM 713 Div1 500 DFSCount
#include <bits/stdc++.h>#define ll long long#define fr(i,x,y) for(int i=x;i<=y;i++)#define rf(i,x,y) for(int i=x;i>=y;i–)#define frl(i,x,y) for(int i=x;i<y;i++)using names原创 2018-11-01 15:38:09 · 487 阅读 · 0 评论 -
TopCoder SRM 577 Div1 500 EllysChessboard
考虑将整个过程倒过来考虑,那么每次就是消除距离最远的点对中的一个点。我们就爆搜消除哪个点,把点状压起来,用map加个记忆化。很诡异的是,我一开始只对所有’#‘状压,结果极限数据根本跑不过去,后来改成对所有点状压就突然跑得飞快,什么鬼啊,点多了不应该更慢了??而且这两种方法在所有点都是’#'的情况下应该是一模一样的啊。。。#include <bits/stdc++.h>#defi...原创 2018-09-27 09:14:09 · 792 阅读 · 0 评论 -
TopCoder SRM 579 Div2 1000 MarblePositioning
貌似tc的div2 1000有很多这样的水题就是暴枚全排列啊。。水破天际了好吗O__O "…#include <bits/stdc++.h>#define fr(i,x,y) for(int i=x;i<=y;i++)#define ll long longusing namespace std;const int N=10;int r[N],a[N];int ...原创 2018-10-03 21:01:42 · 289 阅读 · 0 评论 -
TopCoder SRM 575 Div1 500 TheSwapsDivOne
每个数只有两种情况,要么在原来的位置上,要么不在。于是我们用一个简单的dp求出两种情况的概率。f[i][0/1]f[i][0/1]f[i][0/1]:Swap了iii次后,0表示不在原来位置上,1表示在,的概率。转移方程f[i][1]=f[i−1][1]∗(n−2)/n+f[i−1][0]∗2/n/(n−1)f[i][1]=f[i-1][1]*(n-2)/n+f[i-1][0]*2/n/...原创 2018-10-03 15:28:04 · 232 阅读 · 0 评论 -
TopCoder SRM 581 Div1 250 SurveillanceSystem
为啥感觉这个250比500tmd难啊啊啊。。TC 250pts的题解真心难写,都是些乱搞,主要靠意会。。我们先把containerscontainerscontainers存入桶,然后我们再对于每个桶中的监控求出可能放的位置有哪些(用前缀和,看有多少长为LLL的区间里XXX的数量等于监控看到的数量)。 假设某个桶中有aaa个监控,这些监控可以放在kkk段不同区间。若a==ka==k...原创 2018-09-13 21:03:29 · 167 阅读 · 0 评论 -
TopCoder SRM 581 Div1 500 TreeUnion
一个环肯定是由两棵树中的边与中间连接的两条边组成的 那么我们就可以用c[0/1][k]c[0/1][k]c[0/1][k]表示两棵树中长度为kkk的链的数量 最后的期望就是c[0][i]×c[1][K−2−i]×2×(n−2)!n!c[0][i]×c[1][K−2−i]×2×(n−2)!n!\frac{c[0][i]\times c[1][K-2-i]\times 2\times (n-2)!...原创 2018-09-13 14:30:30 · 277 阅读 · 0 评论 -
TopCoder SRM 579 Div1 450 TravellingPurchasingMan
其实是个很水的状压DP,我还WA了三发。。用f[i][j]f[i][j]f[i][j]表示访问过的商店状态为iii,当前刚从jjj出来,所需的最小时间。然而有一些细节。。#include <bits/stdc++.h>using namespace std;const int M=16;const int N=51;int f[1<<M][M],m;int ...原创 2018-09-18 14:55:19 · 259 阅读 · 0 评论 -
TopCoder SRM 639 DIv2 1000 BoardFoldingDiv2
可以发现行和列其实没什么关系,于是我们愉快地分开处理,最后相乘。比如说现在在处理纵向的折痕: 我们先把每列压成一个数,存入数组aaa,这样就可以O(1)比较两列是否相等。 然后我们再预处理出f[i]f[i]f[i],表示以i,i+1i,i+1i,i+1为中心的回文长度。 再用dp[i][j]dp[i][j]dp[i][j]表示折成第iii列到第jjj列是否可行,枚举折在哪里即可。复杂...原创 2018-09-07 10:05:01 · 195 阅读 · 0 评论 -
TopCoder SRM 599 Div2 950 SimilarNames2
暴力求出每个单词的前缀数量f[i]f[i]f[i] 那么如果我们要将这个单词排在第LLL位,前L−1L−1L-1位的方案数就是(f[i]−1L−1)(f[i]−1L−1)f[i]-1 \choose L-1,然后最后n−Ln−Ln-L位就乱排。#include <bits/stdc++.h>using namespace std;const int N=51;const i...原创 2018-09-07 09:06:43 · 171 阅读 · 0 评论 -
TopCoder SRM 617 Div2 1000 MyVeryLongCake
答案为n−ϕ(n)n−ϕ(n)n-\phi(n)//tc is healthy, just do it#include &amp;lt;bits/stdc++.h&amp;gt;using namespace std;template&amp;lt;class T&amp;gt; void checkmin(T &amp;amp;a,const T &amp;amp;b) { if (b&am原创 2018-09-07 08:35:18 · 130 阅读 · 0 评论 -
TopCoder SRM 589 Div2 1000 FlippingBitsDiv2
感觉讲不清。。#include &lt;bits/stdc++.h&gt;using namespace std;const int N=2501;string s;int n;int f[N][2],d[N][2],a[N][2];template&lt;class T&gt; void checkmin(T &amp;a,const T &amp;b) { if (b&lt;原创 2018-09-12 07:30:39 · 377 阅读 · 0 评论 -
TopCoder SRM 583 Div2 900 GameOnABoard
这题竟然用最短路就可以过。。 然而我用了deque… 有点类似bfs吧,只不过碰到’0’就push_front(),这就保证了每个点被bfs到时都是最短距离。#include &amp;lt;bits/stdc++.h&amp;gt;using namespace std;const int N=41;const int dx[4]={0,0,-1,1};const int dy[4]={1,-1...原创 2018-09-03 20:50:18 · 245 阅读 · 0 评论 -
TopCoder SRM 589 Div1 250 GooseTattarrattatDiv1
由于每次相同的字母都是一起变的,所以相同的字母可以看作一个整体。 先在原串上跑一遍回文,用并查集维护哪些字母要变成一样的。 然后修改的时候当然就是把出现次数少的修改成出现次数多的……一开始智障以为是像合并果子一样的…结果发现只要全都合并到最大的那个上就好了 于是代码就被我魔改成了堆排???//tc is healthy, just do it#include <bits/st...原创 2018-09-11 22:15:59 · 402 阅读 · 0 评论 -
TopCoder SRM 579 Div1 250 UndoHistory
TC250日常乱搞简单地讨论一下如果前一个串是当前串的子串,那么可以选择不Undo,直接在后面输入(然而有时Undo一下更优2333,所以还要两种情况取minUndo操作就是找一个最长的和它相同的前缀,这个用字典树可以轻易做到#include &lt;bits/stdc++.h&gt;using namespace std;const int N=2501;const int M...原创 2018-09-27 15:01:18 · 216 阅读 · 0 评论 -
TopCoder SRM 712 Div1 600 AverageVarianceSubtree
卡精度没素质。。。。今天才知道有__float128这种东西,问了一下noip不能用。。。DescriptionDescriptionDescription传送门nnn个点的树,每个点有一个权值,任选一棵非空子树,求其中所有点方差的期望。SolutionSolutionSolution裸的树形DP,感觉不值600,不过之前做过另一道树形DP也是600…反正这种题吧,大概xy肯定会说要...原创 2018-10-31 18:53:05 · 204 阅读 · 0 评论 -
TopCoder SRM 689 Div1 500 MultiplicationTable3
get到了一个新套路我们先把空集也算进来,直接x++假设我们现在构造出了一对(n,x)假设此时的矩阵为aaaaaaaaa那么可以这么构造出(n+1,x+1),因为我们发现集合中只要选了n+1,其他所有都得选,所以只多了一个1到n+1的全集。aaa1aaa2aaa31230还可以这么构造出(n+1,x*2),因为对于之前的每个集合,都可以选择放或不放n+1aaa3aaa3...原创 2018-10-26 18:49:05 · 136 阅读 · 0 评论 -
TopCoder SRM 693 Div1 Medium BipartiteConstruction
传送门由于Arena进不去所以代码就没写了,反正这种题重在思维吧。DescriptionDescriptionDescription构造一个二分图使得其完美匹配数量为K(K&lt;=1000000000)K(K&lt;=1000000000)K(K<=1000000000),要求两边点数相同且都&lt;=20&lt;=20<=20,边数&l...原创 2018-10-29 18:23:09 · 239 阅读 · 0 评论 -
TopCoder SRM 685 Div1 450 FoxAirline2
这题可以用一个dfs对于每条边,我们尝试将它染成某一种颜色。有一个显而易见的小优化:如果一方的这两个点已经联通,就不用连这条边。其实这样复杂度就对了。。于是我又从网上粘了一个关于复杂度的解释(原文是日语,这是Google翻译的结果,稍微润色了一下,原文)由于N&lt;=10,如果两种颜色都有9条边,则可以形成一颗生成树。出于这个原因,“如果你能以两种颜色重新连接,同时尝试两者”的情况...原创 2018-10-23 16:53:01 · 199 阅读 · 0 评论 -
TopCoder SRM 684 Div1 600 DivFree
又是一道神奇的题最开始就想到容斥,结果写完了之后过不了样例,意识到我那个容斥好像并不满足容斥那个组合数的条件。。然后标算的容斥刷新了我对容斥的认识= =先预处理出dp[i]dp[i]dp[i],表示长度为iii的不合法序列数(dp[1]dp[1]dp[1]事实上是合法的,但还是把它算出来)我们用h[i]h[i]h[i]表示长度为iii的合法序列个数,考虑我们在h[i−1]h[i-1]h[i...原创 2018-10-22 11:48:17 · 279 阅读 · 0 评论 -
TopCoder SRM 681 Div1 500 LimitedMemorySeries2
这题假得不行啊…一直感觉O(nlogn)O(nlogn)O(nlogn)是过不了的,结果TC评测机太强了啊,1e7的数据200+ms就跑过去了。。所以说要有信仰啊。。。好的其实这题就是纯暴力,复杂度证明我就直接从网上粘一个过来了。。Let’s look at the max number in the range. Then, we have a recurrence T(n) = min(...原创 2018-10-23 14:47:09 · 183 阅读 · 0 评论 -
TopCoder SRM 690 Div1 500 TreeWalker
一题磨了一晚上,其实根本不难,就是我太菜了。我们稍加考虑,就会发现题目求的实际上是2×∑2n−1−dis(i,j),(i&lt;j)2 \times \sum 2^{n-1-dis(i,j)},(i&lt;j)2×∑2n−1−dis(i,j),(i<j),稍加变形,就是2n×∑2−dis(i,j),(i&lt;j)2^{n} \times \sum 2^{-dis(...原创 2018-10-28 21:08:04 · 208 阅读 · 0 评论 -
TopCoder SRM 683 Div1 500 GCDLCM2
神奇的结论题首先,由于gcd(x,y)∗lcm(x,y)=x∗ygcd(x,y)*lcm(x,y)=x*ygcd(x,y)∗lcm(x,y)=x∗y,然后有个结论小学就该知道了吧,乘积一定时,两个数差得越远和越大,所以,我们应该尽量多做这种操作。考虑将x,yx,yx,y质因数分解,设x=p1a1⋅p2a2⋯pnanx=p_1^{a_1} \cdot p_2^{a_2} \cdots p_n^{...原创 2018-10-23 08:27:51 · 147 阅读 · 0 评论 -
TopCoder SRM 691 Div1 500 Moneymanager
学习了DP的新姿势QAQ首先应该不难发现如果无视XXX的话整个序列应该是按a[i]/b[i]a[i]/b[i]a[i]/b[i]从大到小排列的,这个就是个很基础的贪心吧,证明用的也是贪心中最常见的方法:交换相邻元素。然后我们考虑一下这个XXX对答案的贡献其实就是X⋅∑i=n/2+1i=nb[i]X \cdot \sum_{i=n/2+1}^{i=n}b[i]X⋅∑i=n/2+1i=nb[i]...原创 2018-10-28 18:33:16 · 209 阅读 · 0 评论 -
TopCoder SRM 680 Div1 450 BearSpans
做出TC Div1 medium真是开心,尽管一般来说都是450的较水题qwq对于此题,我们要发现几个性质。性质1:每一轮操作过后联通块个数起码减少一半性质2:操作次数只与MST上的边有关性质1先判掉无解。性质2告诉我们不在MST上的边随便连连就好了。于是我们干脆让MST上的n−1n-1n−1条边就是最小的n−1n-1n−1条边,并且这个MST是一条链。由于合并kkk次,我们就只需考...原创 2018-10-22 19:43:36 · 266 阅读 · 0 评论 -
TopCoder SRM 666 Div1 444 SumOverPermutations
感觉是道好题~原来碰到这种排列的dp就一脸懵逼,因为状态特别难设计,每次都感觉只会状压,现在终于有点get到其中的套路了。在这题里我们可以发现几个事实每个位置对答案的贡献只和它左右两边是否比它早确定有关我们可以通过将iii插入111到i−1i-1i−1的排列中得到所有111到iii的所有排列于是我们可以弄一个f[o][i][j]f[o][i][j]f[o][i][j]表示到第ooo个...原创 2018-10-16 21:21:29 · 165 阅读 · 0 评论 -
TopCoder SRM 589 Div1 450 GearsDiv1
QAQ果然最多也就做个450pts的…至于500pts…呜呜对于这题,我们可以发现,最优方案肯定是两种颜色的齿轮往同一个方向转,另一种颜色往另一个方向转。比如说R和G都是顺时针旋转,那就要把R和G之间的边都删掉,我们发现R和G以及它们之间的边可以看做一个二分图,删去最少的点之后使所有点都不相连,剩下的一定是最大独立集。于是跑一遍最大匹配,匹配数就是要删的点数……#include <...原创 2018-09-11 21:39:24 · 284 阅读 · 0 评论 -
TopCoder SRM 581 Div2 1000 TreeUnionDiv2
好水。。 先把两点之间的距离预处理出来,然后暴力全排列就行了。。。#include &lt;bits/stdc++.h&gt;using namespace std;const int N=51;const int INF=1e9;int n,a[N][N],d[N][N],c[N];class TreeUnionDiv2 {public: int maximumCyc...原创 2018-09-03 07:53:46 · 232 阅读 · 0 评论 -
TopCoder SRM 682 Div2 1000 FriendlyRobot
大概思路是用f[i][j]f[i][j]f[i][j]表示当前执行到第iii个操作,改变了jjj次时回到原点的最大次数,并且此时刚好在原点(这是为了方便转移)。然后每次只需要枚举一个kkk,计算出执行完(i,k](i,k](i,k]这一段操作后再回到原点需要修改几个,就可以进行转移。 少写了一句判断状态是否可行害得我懵逼了好久(感谢xLLLx帮我Debug)#include &amp;lt;bits...原创 2018-08-07 14:53:50 · 176 阅读 · 1 评论 -
TopCoder SRM 571 Div1 250 FoxAndMp3
就是个大暴力? n<=50n<=50nn>50n>50n>50一样做 n>50n>50n>50:用一个dfs按字典序枚举[1,n][1,n][1,n]中的数,为了方便直接用一下字符串流转成字符串就行了。#include <bits/stdc++.h>using namespace std;vector<string> a;s...原创 2018-08-14 21:05:01 · 212 阅读 · 0 评论 -
TopCoder SRM 571 Div2 1000 MagicMoleculeEasy
震惊!竟然就是个爆搜…… 爆搜每条边上选哪个点,如果最后还没选满KKK个,就挑没选过的点里大的选。 代码有点丑。。#include <bits/stdc++.h>using namespace std;const int N=51;const int M=N*N;int n,m,a[N],b[N],K,num[N];int u[M],v[M];int ans,s;...原创 2018-08-14 20:14:54 · 248 阅读 · 0 评论 -
TopCoder SRM 570 Div1 550 CentaurCompany
和Div2的1000类型差不多,都是个很套路的树形DP 我的做法暴力得要死,天晓得怎么过的。。 f[0/1][i][j][k][l]f[0/1][i][j][k][l]f[0/1][i][j][k][l],0/1表示第iii个节点在哪个公司,jjj表示humanhumanhuman公司有几人,kkk表示humanhumanhuman公司有几个联通块,lll表示horsehorsehorse公司...原创 2018-08-14 16:07:02 · 306 阅读 · 0 评论 -
TopCoder SRM 570 Div1 250 RobotHerb
可以发现执行四次之后方向一定和原来相同,有了这个性质就很容易处理了。#include <bits/stdc++.h>#define ll long longusing namespace std;const int dx[4]={0,1,0,-1};const int dy[4]={1,0,-1,0};int n;ll x,y;int d;class RobotH...原创 2018-08-14 13:18:39 · 262 阅读 · 0 评论 -
TopCoder SRM 566 Div1 250 PenguinSledding
可以发现满足条件的路径只有几种情况:一条都不选只选一条一个点上连若干条边,且边数>=2(就是类似一朵花的形状)三条边构成一个环(这种情况很容易漏掉)分别计算即可。//tc is healthy, just do it#include <bits/stdc++.h>#define ll long longusing namespace std;cons...原创 2018-08-10 19:42:04 · 275 阅读 · 0 评论 -
TopCoder SRM 678 Div2
T1 ThePhantomMenace#include &lt;bits/stdc++.h&gt;using namespace std;class ThePhantomMenace {public: int find( vector &lt;int&gt; doors, vector &lt;int&gt; droids );};int ThePhantomMenace:...原创 2018-08-01 20:12:14 · 256 阅读 · 0 评论 -
TopCoder SRM 570 Div2 1000 CentaurCompanyDiv2
这次的1000算简单的,就是统计有几个子树。 树形DP一波,f[i]f[i]f[i]表示以iii为根的子树数量,枚举儿子,转移有三种种情况:只连之前的儿子(f[i]f[i]f[i])只连当前儿子(f[v[i]]+1f[v[i]]+1f[v[i]]+1)都连(f[i]∗(f[v[i]]+1)f[i]∗(f[v[i]]+1)f[i]*(f[v[i]]+1))分别计数即可。#inc...原创 2018-08-14 08:48:48 · 236 阅读 · 0 评论 -
TopCoder SRM 567 Div2 1000 countPlacements
神tm这题有毒,模数是1e9+9不是1e9+7坑死我了容易发现有些格子是必须作为山顶的,其余格子是不是山顶都是无所谓的。一个格子只要满足上方三个都不是’X’就必须作为一个山顶,因为没有别的山顶可以覆盖它了。可以统计出必须为山顶的格子有 sss 个,其它’X’的格子有 sXsXsX个。套用排列组合经典的小球问题,就相当于将 NNN 个不同的小球放入 sXsXsX 个盒子里,可以为空,其中 s...原创 2018-08-10 14:29:17 · 209 阅读 · 0 评论 -
TopCoder SRM 677 Div2
感觉T2反而是最难的。。反正代码是越来越暴力了。。。 这次前两题的代码都很没美感。。 不过T1终于上240了,T2终于上400了(然而是550啊) T3调了半天结果竟然是数组开小了= =T1 PalindromePrime丑陋的暴力#include <bits/stdc++.h>using namespace std;class PalindromePrime ...原创 2018-07-31 09:35:15 · 269 阅读 · 0 评论 -
TopCoder SRM 676 Div2
题略难。 T3数据好像有锅。 来不及写题解了,就贴个代码。T1 FarmvilleDiv2#include &lt;bits/stdc++.h&gt;using namespace std;const int N=51;int n;struct data{ int t,c;}a[N];class FarmvilleDiv2 {public: int mi...原创 2018-07-30 11:10:37 · 184 阅读 · 0 评论 -
TopCoder SRM 675 Div2 题解 (填坑速度感天动地)
232.66+368.81+685.73=1287.2 T2花的时间有点久,T1也没上240… 不过难得A了还是很开心的~~ 题解要不就坑着叭QAQ原创 2018-07-29 19:14:25 · 828 阅读 · 1 评论 -
TopCoder SRM 568 Div1 250 BallsSeparating
最不擅长的码农题,情况繁琐。如果一个颜色存在,那么必须有至少一个盒子放这种颜色。我们枚举必须放某种颜色的盒子,其余的盒子把数量较小的两种颜色拿走就行了。//tc is healthy, just do it#include &lt;bits/stdc++.h&gt;using namespace std;const int N=51;int n,c[N];class Balls...原创 2018-08-13 09:20:05 · 208 阅读 · 0 评论