top-coder
Tz_rain
需要做的事情
解题 总结 巩固
解题三个步骤
量化 分析 实现
需要改变的三个问题
性格 心态 思考方式
不要再后悔
展开
-
Topcoder SRM523-527(DIV2)
.原创 2017-01-20 22:06:34 · 475 阅读 · 0 评论 -
SRM 688 ParenthesesDiv2Hard
给出一段仅由左右括号组成的字符串,和若干个区间(L,R) (各个区间不重叠),问要使每个区间内的序列都合法,最少需要进行多少次交换(每次交换可以互换任意两个位置上的字符)。思路<1>对于每一个的区间一定要满足的是: (( 个数始终大于))于是每次cnt[1]>cnt[0]时就使cnt[1]–,cnt[0]++,res++ 表示把表示把)变成变成(的个数的个数 res为A; <2>最终造成 ((原创 2017-02-02 15:18:39 · 193 阅读 · 0 评论 -
SRM549 Div1 600
/* 对于每一个帽子有3个状态(1 没有开 2 开了有硬币 3 开了没有硬币) 由于题目有限制条件,如果我们每次转移的时候都判断一下太麻烦了 又因为帽子的摆放和硬币的是唯一的所以可以再最后判断 */#include<bits/stdc++.h> using namespace std;const int M=15,INF=1555,N=1694323;int dp[原创 2017-04-13 20:00:36 · 258 阅读 · 0 评论 -
SRM593 Div1 450
令SS和TT为分成的两个集合。答案为 max(∑i∈Sbi−∑i∈Tai,∑i∈Tbi−∑i∈Sai) =max(∑i=0n−1bi−∑i∈T(ai+bi),∑i∈T(ai+bi)−∑i=0n−1ai) \begin{align} \max(\sum_{i \in S} b_i - \sum_{i \in T} a_i, \sum_{i \in T} b_i - \sum_{i \in S} a_原创 2017-04-12 20:48:24 · 264 阅读 · 0 评论 -
SRM589 Div1 450
/* 终态分析:和生活中一样一定是有两种齿轮同一个方向,另一个齿轮为连接这两个齿轮的辅助齿轮 于是我们可以分三中情况枚举 对于辅助的齿轮我们可以忽略因为它不会出现矛盾的情况 对于剩下的齿轮(构成了一个二分图)我们要构造一个集合使他们互不相连 即求二分图的最大独立集(最大独立集=总点数-最大匹配) 我们需要删除的齿轮即为最大独立集外剩下齿轮的一半*原创 2017-04-12 20:02:36 · 242 阅读 · 0 评论 -
SRM573 Div1
/* 由于每个点存在两个状态(编号和高度)我们用dis[nw][nx]表示到 原来编号为nw把高度改成编号为nx 的距离 于是 dis[s][k1]=dis[t][k2]+abs(h[t]-h[k2]);*/ #include<bits/stdc++.h>using namespace std;typedef long long ll;const int M=55;co原创 2017-04-10 21:26:46 · 266 阅读 · 0 评论 -
SRM574 Div1 450
#include<bits/stdc++.h>using namespace std;typedef long long ll;int n,m,S,T,A[18];ll dp[1<<18][18];ll dfs(int s,int a){ if(s==T){ int b=(a+1)%n,c=(a+n-1)%n; return b!=A[0]&&c!=原创 2017-04-11 19:11:13 · 201 阅读 · 0 评论 -
SRM 559 Div1 500 HatRack
/* 计算出每个节点对应子树的方法相乘即可 */ #include<bits/stdc++.h>using namespace std;typedef long long ll;#define M 55int n,ch[M][M];vector<int>G[M];ll dfs(int x,int f=0,int p=1){ ch[x][0]=0; for(in原创 2017-04-30 19:26:39 · 252 阅读 · 0 评论 -
SRM553 Div1 500
/* 终态分析:对于一个情况(以某一个为标准)最后答案一定是 对于每一行来说的一个单调数列 如 000001 11100 000011 或 11100 000011 11000 011111 10000 我们用A[i][j原创 2017-04-16 19:33:38 · 313 阅读 · 0 评论 -
SRM554 Div1 500
/* 终态分析:最终有贡献的值为每两个间的最大值(每个值可以出现0,1,2次) 不出现的数可以被比它大的数替代那就让个数最小的不出现其他都出现了一次 如果不考虑字典序的话我们将其排序成一个单调序列即可 如图1 于是我们可以先的找出一个字典序尽量小的递减序列再把剩余的接上去使之递增 如图2*/#include<bits/stdc++.h>using namespa原创 2017-04-16 20:37:46 · 256 阅读 · 0 评论 -
SRM 562 Div1 500 CheckerFreeness
/* 通过枚举一对黑点(l,r)。 我们可以计算出其他所有白点和他们的相对位置(用叉积表示) 我们把剩余的白点以和直线(l,r)的左右位置分成两部分 我们用pos表示在线段l -> r左侧的点,其相对于l,相对于r,分别是顺时针第pos[i].fr, pos[i].sc个点。 lim表示在l -> r右侧的点,与它,选中的l,r,能形成凸多边形的原创 2017-05-04 20:13:03 · 383 阅读 · 0 评论 -
SRM 691 Undiv2
s(i)表示第二个不能整除i的数。求1~n所有s(i)的和(1<=n<=1000,000,000).思路<1>显然对于一个X如果第一个不能整除它的数为z(X)所以lcm(1,2,…z(X)-1)必为X的一个因子 <2>同理对于一个X如果前两个不能整除它的数分别为z(X),s(X),lcm(1,2,…z(X)-1,z(x)+1,…s(x)-2,s(x)-1)必为X的一个因子,于是直接枚举即可z(i)原创 2017-02-03 10:16:32 · 393 阅读 · 0 评论 -
SRM 690 WolfHockeyTeamEasy
有2*n只狼,编号为0到2*n-1。他们拍照时会排成两行,每行n只狼。一张照片好看,必须满足每一行的最大编号大于等于k。每一张照片有一个特征序列,这个序列有n+2个元素,前n个元素分别是n列的列最大值,后两个元素分别是两行的行最大值。两张照片只有在特征序列不同时才被认为是不同的。他们想知道可以拍多少张好看而又不同的照片。const int M=2005,P=1e9+7;class WolfHock原创 2017-02-02 21:40:45 · 217 阅读 · 0 评论 -
SRM 638 DIV2 CandleTimerEasy
现在有n-1个蜡烛,如果点燃了长度为L的蜡烛的一段,那么就需要L个单位时间将这根蜡烛烧完。如果在蜡烛的两端同时点火,那么就只要一半的时间。把蜡烛作为边摆放成一棵有n个节点树,每个节点都是一根或多根蜡烛的一端。在0时刻可以选择任意一个或多个度为1的节点点火,那么经过一定的时间所有的蜡烛都会被燃烧殆尽。注意,如果火焰燃到了一个节点,那么所有以该节点作为端点的蜡烛都会点上火。求对于0时刻不同的点蜡烛的方式原创 2017-02-01 14:49:59 · 240 阅读 · 0 评论 -
SRM 584 Excavations2
原来城市中有n个建筑,每一个建筑有一个权值表示它的种类。现在,建筑全被风沙埋掉了,人们只从中挖出了K个建筑。告诉你哪些种类的建筑被挖出来了至少一个。人们想知道,他们挖出来的建筑究竟是n个建筑中的哪几个,问可能的方案有几个?(n<=50)举个例子:原来的建筑为1 2 2 1,人们挖出了2个建筑,其中1、2两种种类的建筑都被挖出来至少一个,那么可能挖出来方案有4个:第一个1和第一个2,第一个1和第二个2原创 2017-01-23 19:23:59 · 224 阅读 · 0 评论 -
SRM 583 GameOnABoard
【题意】:给出一个矩阵n*m,每个元素为0或1,对于每一个位置,以其为起点往外走,只能平行于坐标轴走,两个点的距离表示两点间包含1最少的路径上1的个数,一个位置的代价表示它到其他所有点的距离中最大的距离,求所有位置中最小的代价; 【解题思路】:这题其实就是求两个点之间的最短路,所以可以直接dijkstra去做,将点上的0或1表示成两点之间的距离,即边,然后枚举一个起点,求出最短路的最大值就好了。#原创 2017-01-23 15:35:37 · 213 阅读 · 0 评论 -
SRM552 FoxPlusMinus
数组first,大小为K。构造一个first的排列F。对于无穷序列A:∀∀i,0<=i思路<1>n int k=F.size(); res.resize(k); sort(F.begin(),F.end()); if(k&1||N<k){ N=N%(k+1); if(N==k){ //最大的F[k];原创 2017-01-23 11:17:00 · 249 阅读 · 0 评论 -
SRM 551 ColorfulCupcakesDivTwo
有n个蛋糕(1<=n<=50),蛋糕有A,B,C三种。(读入一个字符串,由‘A’、’B‘、’C‘三种字符组成)现在有n个人围成一圈,每个人将得到一个蛋糕,而且相邻两个人的蛋糕是不同的。求有多少种分法?答案mod 1e9+7。思路<1>对于一个状态如何转移:我们发现可以从一个X->可以以其为中心加上其他字符来实现转移int dfs(int f,int a,int b,int c,int t){原创 2017-01-22 20:07:53 · 226 阅读 · 0 评论 -
SRM 550 TopView
Ralph 往桌子上放了许多个有唯一颜色的矩形纸片(可以重叠),现在给出桌子的俯瞰图,输出Raplh往桌子上放方格的顺序,输出字典序最小的一种。 如果无解,那么输出“ERROR!”思路<1>通过标记每种颜色A,B的四个角来得到A和B的关系; <2>最终可以得到A->B,(表示A在B下)C->D等关系再利用拓扑序来得到答案//处理每一个颜色void add(int t,int x,int y){原创 2017-01-22 16:42:17 · 233 阅读 · 0 评论 -
SRM 549 OrderOfTheHats
题意孩子们有N(1<=N<=20)个音标要去学,按照一般的教学法则,每次学一个音标的时候,要先把比这个音标更基础的音标学会。但由于这个教学法则会出现循环需要的情况导致孩子们无法学完,请你帮助他们用最少的次数改变这个教学法则。给定一个vectorspellchart,spellchart[i][j]表示如果为’Y’则音标i必须在j前学习完,否则为’N’。你可以将’Y’改成’N’或者’N’改成’Y’,但原创 2017-01-22 10:39:26 · 314 阅读 · 0 评论 -
SRM 548 KingdomAndPassword
题意:有一个老密码,新密码是老密码的一种排列(可能不变),新密码每位有一个限制数字,即该位不能使用该数字问:新密码是多少(以abs(old-new)为第一关键字,new为第二关键字升序排列后输出第一个排列)若无解输出-1 int A[M],B[M],n,C[M];bool ok; bool mark[2][1<<20]; ll ans1=-1,ans2=-1; void f原创 2017-01-21 22:32:33 · 335 阅读 · 0 评论 -
SRM 586 DIV2 1000 StringWeightDiv2
给出序列长度len,要你用26个字母将其填满,填满后该序列的代价即为每一个字母最右边的位置IDR减去最左边的位置IDL,比如序列ABCACAZ的代价就是(6-1)+(2-2)+(5-3)+(7-7)=7先求使得代价最小的方案数;思路当序列长度大于26时显然最优的方法是把一样的字符放在一起 可以使用插空法把整个序列分为26份 但是这时我们考虑到此时每一种方案都是由26!种排列构成的 所以总方案数原创 2017-01-24 09:54:01 · 333 阅读 · 0 评论 -
SRM 585 EnclosingTriangleColorful
题目大意: 平面内有一个边长为m的正方形。正方形内部有n个黑色的点(不包含边界)。现在要在正方形的边上选取三个点组成三角形(不能选择顶点,且任意两个点不在同一条边上),要求所有的黑点都在三角形的内部或边上。问有多少种选择三角形的方案。(m<=300, n<=50)三角形顶点以及黑点坐标皆为整数先是两两枚举出所有点对,判断所有的黑点是否在同一侧 然后枚举所有三角形,O(1)判断 预处理O(m*m原创 2017-01-24 09:07:46 · 258 阅读 · 0 评论 -
SRM 611 DIV2 1000 ElephantDrinkingEasy
有一个N*N的田地,其中有一些田地中有积水。现在在田地周围有一些大象,它们可以向前伸长鼻子来喝到田地中的积水。大象的鼻子足够长,但是不能交叉,且一块田地中只能有一头大象在喝水。如下图,a是合法的,b,c均不合法。现在问最多能有多少头大象喝到水。N<=5因为N很小可以4*N的枚举每一个边缘的格子复杂度为4*N*2^(4*N)然而可以只枚举上下的两排而计算出另外的两排复杂度为4*N*2^(2*N)cla原创 2017-01-31 11:29:21 · 290 阅读 · 0 评论 -
SRM 556 Div1 500
/* 非常简单的题,可是做了好久 裸的区间dp 由于要满足两个条件{1.字典序最小;2.ans>s2} 我们通过dp找到对于[a,b]区间合法解的最小字典序的串(解决了1) 为了解决2我们对dp再加一维 dp[a][b][0]表示ans<s2;dp[a][b][1]表示ans==s2;dp[a][b][2]表示ans>s2 反思:对于某一个和字典序原创 2017-04-17 22:05:37 · 287 阅读 · 0 评论