构造 --- 规律 --- 思维 --- 贪心 ---
文章平均质量分 62
orz11111111
这个作者很懒,什么都没留下…
展开
-
Atcoder 500 Checker 思维+二维前缀和
题意:一个无限大的二维平面 只能涂两种颜色,现在有n个要求(x,y,0/1)表示(x,y)上的点颜色要涂为黑/白.给出n,k.在平面上的的任意一个联通分量大小都为k*k的条件下,最多能满足多少个要求?n枚举一个点作为某个颜色的左上角 因为任意联通分量的大小都为k*k 所以现在每个点的颜色都固定了在遍历条件看有多少个满足 O(n*k*k).因为(x,y)和(x+2k,原创 2018-01-24 21:05:40 · 322 阅读 · 0 评论 -
CF 604C Alternaive Thinking 思维题
题意:长度为n的01序列.定义波动子序列为{0,1,0,1..}或者{1,0,1..}形式的子序列.操作:将一段区间反转,问操作次数不超过一次时,波动子序列的最长长度? n假如不操作 那么最长的长度相等于将连续相同的数合并之后的长度. 100011 -> 101然后又因为翻转一个区间[L,R] 等价于 翻转前缀r 和前缀 l-1.翻转一个前缀i,其关键作用的只有[原创 2018-03-26 22:26:54 · 160 阅读 · 0 评论 -
Atcoder 700 Worst Case 贪心+二分
题意:两个1,2,3,....inf的集合A,B. 从两个集合中各选一个数(a,b)的得分为a*b.Q次询问,每次询问(a,b),[表示分别选中a,b].问从剩下的两个集合中最多能选出多少对(x,y)使得x*y<a*b Q<=100. 1<=a,b<=1e9.当a<b1,2,3,....a-1,a,a+1.....1,2,3..C................原创 2018-10-26 17:19:23 · 235 阅读 · 0 评论 -
CF 558C Amr and Chemistry 思维,二进制
题意:长度为n的序列a,操作1:将某个a[i]*2.操作2:将某个a[i]/2(下取整).n,a[i]最后的数肯定不会超过序列中的最大值mx,若y>mx 那么每个元素的最后一次操作肯定是*2=y>mx,此时去掉乘2操作,操作数减小,数列的数还是相等操作每次都是乘以或者除以2[下取整]19-10-5-219-10-20-4019-10-5-2-4-原创 2018-04-16 21:06:58 · 210 阅读 · 0 评论 -
CF 591C Median Smoothing 规律
题意:给出一个01序列a.操作:令b[1]=a[1],b[n]=a[n] b[i]=(a[i-1],a[i],a[i+1])出现最多的数值(0/1).然后令序列a等于序列b.n若当前位置i满足,a[i]==a[i-1]或者a[i]==a[i+1] 则无论操作多少次 a[i]不会发生变化10101 -> 11011 -> 11111101010 ->110100 -> 111原创 2018-04-04 14:59:12 · 134 阅读 · 0 评论 -
CF 961D Pair Of lines 思维,共线
题意:二维平面上有n个不同的点(x,y),问是否能画两条直线 使得所有点都至少在其中一条直线上.n先找到三个不共线的点a,b,c 因为只能画两条直线,所以a,b,c三点间必须画一条直线.三种情况(a,b),(a,c),(b,c) 画完这条线(a,b)以后,判断剩下的点是否在(a,b) 或者在(c,i)上即可.#include using namespace std;ty原创 2018-04-05 15:58:24 · 314 阅读 · 0 评论 -
CF 583C GCD Table 思维
题意:定义:一个长度为n数列a,其gcd表为一个n*n的矩阵b, b[i][j]=gcd(a[i],a[j]) 给出n*n个数,选出n个数作为数列a 使得数列a的gcd表正好为这n*n个数.ngcd(a,b) 因为一定有解.所以现在顺着对角线来填表,把已知的gcd加到map中.若table中下一个数在map中 则该数为某两个数的gcd.否则该数为当前最大.填入对角线格子原创 2018-04-05 22:32:59 · 239 阅读 · 0 评论 -
CF 908F New Year and Rainbow Roads 思维,贪心,联通
题意:x轴上有n个点,分别有三种颜色(BRP),两点之间连边的代价为其距离.要求删除红色点R时,BP中的任意两点能联通.要求删除蓝色点B时,RP中的任意两点能联通.n若没有P点 则连接相邻的B,和连接相邻的R即可.例子:RPR 显然这连接R-P-R,比[R-R,R-P]来的优先将在第一个P之前的相邻点依次连接,在最后一个P后面的相邻点依次连接.然后相邻两原创 2018-04-12 19:16:51 · 239 阅读 · 0 评论 -
CF 964D Destruction Of A Tree 思维,set
题意:n个节点的树,操作:删除度数为偶数的顶点以及他所有的边.n每次删除偶数度的顶点,也就是每次删除某个点其偶数个边.若顶点数为偶数,那么有奇数条边 永远会有一条边不会被删除,此时肯定无解.若顶点数为奇数,那么至少有一个点的度为偶数 (因为总的度数为偶数),此时一定有解.要想删叶子节点 就必须删掉其父节点.顺着叶子往上找到第一个度数为偶数的点u,此时u的原创 2018-04-18 21:09:02 · 154 阅读 · 0 评论 -
Atcoder 700 Both Sides Merger 思维
题意:n个数的序列a,每一轮选择一个数a[i].若a[i]在开头或者结尾 则直接删除a[i]否则将令a[i]=a[i+1]+a[i-1] 并将a[i+1],a[i-1]删除n设最后的数为res, res=a[p1]+a[p2]+...a[pk] p[i]为原序列中的下标.若两个下标的奇偶性不同 则不可能同时出现在序列p中两个下标奇偶性相同,通过操作中间元素,删3个加一原创 2018-03-26 17:01:26 · 211 阅读 · 0 评论 -
CF 610C. Harmony Analysis 构造(Walsh Matrix)
题意:已知向量中每个坐标的值都为1或者-1.0Walsh矩阵:H[k]={2^k * 2^k}的矩阵 任意两个行向量点乘结果为0.构造方法如下.{H[2^(k-1)],H[2^(k-1)]}{H[2^(k-1)],-H[2^(k-1)]} #include using namespace std;const int N=2e3+5;int n,a[N][N],b[原创 2018-03-21 22:20:24 · 319 阅读 · 0 评论 -
CF 915E. Physical Education Lessons 思维+set维护
题意:初始有序列a为n个2,Q次操作.操作1:将[l,r]的点变为1.操作2:将[l,r]的点变为2.在每次操作过后输出序列a有多少个2.n将[l,r]内的数置成0/1,区间置位.但是n太大.q定义一个set来维护二元组[L,R] 表示为1的区间.并且每个区间在set中不相交 按R升序排列.当op==2时 在set中删除和[L,R]有交集的区间并且插入多原创 2018-01-20 21:37:44 · 315 阅读 · 0 评论 -
CF 861C Did you mean DP or 贪心
题意:定义一个字符串合法:当这个字符串不会出现连续三个以上的非元音字符.除非该字符串为同一个非元音字符例如:allllllabc 该字符串为合法. |s|设d[i] 为前i个分割成合法 最少需要插入的空格数.预处理f[l][r] 表示[l,r] 是否为合法枚举最后一段的长度为j,dp[i]=min(dp[i-j]+1)记录op[i]为在i的决策即可.|s|原创 2018-03-09 14:16:56 · 194 阅读 · 0 评论 -
CF 458C. Travelling Salesman and Special Numbers 数位,公共前缀
题意:若一个数x其二进制表示中有y个位为1,则操作一次后:数x变成数y.给出n(用二进制表示)和k 问[1,n]中有多少个数在操作k次后能变为1? n虽然n最大为2^1000 但任意一个数操作一次后 其范围在[1,1000]令S为[1,n]操作一次后的集合,所以现在问题等价于S中有多少个数 操作k-1次后能变为1.统计f[i]:表示数字i 操作几次变为1.然原创 2018-03-02 08:30:40 · 268 阅读 · 0 评论 -
CF 851C.Five Dimensional Points 点积,思维
题意:5维空间上有n个点,若一个点a,能找到两个点b,c使得 向量ab和向量ac的夹角为锐角 则这个点为bad.否则为goodn判断两个向量夹角,用到点积 ab * ac =|ab|*|ac|*sin$ 若为锐角 则点积>0暴力枚举点a 在枚举b,c判断点积 O(n^3) 然后过了???.看了下题解,原来n>11时答案都为0.(二维答案为1时最多5个点).然后评论原创 2018-03-16 14:58:43 · 205 阅读 · 0 评论 -
CF 767C.Garland 思维,树三等分
题意:n个节点的树,第i个节点权值为a[i]. n问是否能够删除掉两条边,使得该树分成三个不为空,并且每部分权值之和相等.无解输出-1 否则输出要删除边(u->v)的v节点序号.首先所有点的权值和sum%3要为0,令val=sum/3,f[u]为节点u的权值和找到任意一个f[y]=val的子树y,然后删除掉子树y,在树的剩下部分中找到一个f[x]=val的x即可.删除子原创 2018-03-17 14:34:21 · 521 阅读 · 0 评论 -
Codeforces 606C Sorting Railway Cars 思维,DP
题意:[1..n]的排列,操作:选中一个数,将它移动到排列的开头或者结尾.n<=1e5.问最少要多少次操作 才能将排列变为递增.原本乱搞想着求出一个[s..t]的LIS,然后把<s的数递减放到开头,>t的数递增放到结尾.WA..case:1357246. 忽略了s<x<t这段数.放到开头的:一定是以1结尾递减的序列, 放到结尾的一定是以n结尾递增的序列.枚举往前丢的操...原创 2018-03-23 15:23:57 · 209 阅读 · 0 评论 -
CS 400 Root LCA Queries 思维+LCA
题意:n个节点的树,Q次询问,每次询问(a,b,c)问有有多少个D,使得以D为根时,LCA(a,b)=c1树上任意两点只有唯一路径,a->b = a->LCA(a,b)->b 若c没有出现在a-b的路径中 则lca(a,b)不可能为c.判断c是否在a-b路径中 只要知道dist(a,c)+dist(c,b)是否等于dist(a,b).若c在a-b路径中 那么满足条原创 2018-03-21 18:43:21 · 124 阅读 · 0 评论 -
Atcoder 500 Grid Component 构造
题意:给出a,b a,b<=500.要求构造出一个长和宽在100内的黑白矩阵,其中白色的联通分量个数为a,黑色联通分量个数为b.先把矩阵分成左右两半 分别填上黑色和白色.扣除掉相邻的一列.然后分别在两边填上a-1个黑色和b-1个白色格子,(奇偶性相同,中间隔一行).a,b<=500.两边能填的格子在600个左右,一定有解.#include <bits/stdc++.h>u...原创 2018-03-26 11:30:39 · 231 阅读 · 0 评论 -
CF 976D Degree Set 构造,图论
题意:给出长度为n的递增序列d.保证一定有解.请构造出一个顶点数为d[n]+1,无自环,无重边的图该图的所有点的degree都属于序列d.并且序列d中的每个值都在degree中n<=300, 1<=d[i]<=1000. 输出该图的m条边.因为总共只有d[n]+1个点,要有点的度为d[n],所以有一些点会和图中所有的点连接.设度为d[i]的点的个数为g[i] 若g[n]=d[1]...原创 2018-05-01 20:59:22 · 599 阅读 · 3 评论 -
牛客练习赛16 D.k进制 思维
题意:对于k进制数x,定义d(x)为x个数位的和的k进制表示.若结果超过一位,则继续执行.7进制下 d(3504)=d(3+5+0+4)=d(15)=d(1+5)=d(6)=6若d(x)=b,则称x为幸运的.2给出k进制下的n个数位[a[1],a[2]...a[n]],以及b,问其中有多少个子串是幸运的?因为每个x的最终价值都是1val=x+a[j] val最大为2原创 2018-05-02 22:39:14 · 358 阅读 · 0 评论 -
CF 551C. GukiZ hates Boxes 思维+二分
题意:长度为n的序列a,有m个人初始在下标0.每个人每秒可以向前走一格,或者将当前所在a[cur]减少1.n,m显然有单调性 二分时间t.假如m==1 那么就是将当前变为0,然后继续往前.现在让m个人 每个人消除的值尽量大 操作同时进行,可以等价于m个人都有t秒时间 然后单独考虑每个人即可.(x:人,y:时间,判定是横着来的,每秒钟操作取竖的即可).O(m*lo原创 2018-04-25 14:18:31 · 215 阅读 · 0 评论 -
CF 506E Tree with Small Distances 思维.
题意:n个点的树.n<=2e5.最少添加多少条边才能使得节点1到任意一个点的距离<=2. 首先最多不会添加超过n-2条边. 假如1->v,1->u的距离超过2.(u,v)之前没有边添加(1,u),(u,v) 显然把(u,v)边替换成(1,v)结果更优.所以添加的每条边都是1的出边.考虑的角度很重要.一个节点u可以连它的fa,本身,son[u].情况比较多.把距离...原创 2018-10-26 17:29:07 · 183 阅读 · 0 评论 -
HDU 6438 Buy And Resell 思維,貪心
题意:n件物品,第i天,要么花a[i]元买入物品i,或者以a[i]元卖出背包中的物品.n<=1e5,1<=a[i]<=1e9.问最大获利,以及在最大获利下的最少交易次数.思维:不在第i天考虑是否买入,在第i天时看做获得[1..i-1]物品的买入权利.priority_queue维护当前能买的物品,set维护已经卖出去的物品.现在在第i天只考虑是否能卖出a[i]来获利....原创 2018-10-26 17:28:40 · 101 阅读 · 0 评论 -
CF 513D. Social Circles 思维,贪心
题意: 每个圆圈由若干张椅子组成. 现在有n个人 第i个人要求它左边至少有L[i]张空椅子, 右边至少有R[i]张空椅子.n<=1e5, 0<=L[i],R[i]<=1e9. 可以有任意个圆圈. 问满足n个人的要求时,最少需要多少张椅子? 设p[i]:为坐在第i个人右边的人.显然序列p为一个排列. 那么答案为 n + Σ max( R[i], L[p[i]]) ...原创 2018-11-04 00:29:43 · 174 阅读 · 0 评论 -
CF 518C Colored Rooks 构造
题意: [1:n]n种颜色,m个加成(a,b) 表示颜色a,b为和谐的. 1e9*1e9的网格,每个棋子可以到它同行或者同列的某个棋子上.要求选出摆放k个棋子满足以下要求 k只需要<=5000.要求1: 每种颜色的棋子个数>=1.要求2: 同一种颜色的棋子是联通的.要求3:两个不同颜色的棋子a,b. 只要当(a,b)出现在m个加成中时,(a,b)棋子构成的集合时联...原创 2018-10-31 10:30:26 · 240 阅读 · 0 评论 -
HDU 6370 Werewolf 思维,基环树.
题意:村民只会说真话,狼可能说假话. (i,j,k)表示第i个人说第j个人是k(k=村民或者狼)[i=1..n].i!=j.n<=1e5.总共有2^n种情景(有些可能非法.). 问有多少人一定为村民,以及有多少人一定为狼?因为狼可以将真话也可以讲假话. 假如n个人全部为狼,不会产生任何矛盾,第i人说其他人为村民就当做假话,说别人为狼就当做真话.所以一定为村民的人数为0.先不考虑...原创 2018-10-26 17:24:20 · 183 阅读 · 0 评论 -
HDU 6313 Hack It 构造,数论
题意:要求构造一个n*n的01矩阵,满足其任意的子矩形,其4个角都不全为1.1<=n<=2000.并且矩阵中1的个数要>=85000.令n=p^2. 任意两个01序列相同的1数量不超过1.构造:总共p块.每块有p行,每行分为p个区域.每个区域p列.然后令每一个行中每一个区域都正好有一个1.并且每块中除了第一行以外,其余同行中任意两个1所在位置模p不同余 (同一行1所在...原创 2018-10-26 17:19:00 · 140 阅读 · 0 评论 -
CF 956D. Single-use Stones 思维
题意:x轴有w个点[1,2,3...w],长度为w-1的序列a,表示第i个点有a[i]个石头.现在有一群青蛙要过河,已知青蛙的跳跃距离为[1..L],跳到的点其a[i]值必须要>0,并且每只青蛙到第i个点时,会使a[i]--.1前L个石子的和为sum,那么显然答案最多为sum.设b[i]为第i个位置的青蛙个数最多为多少.能到第i个石子上的青蛙 显然只有从[i-L,i原创 2018-05-04 18:19:55 · 516 阅读 · 0 评论 -
51nod 40 區間的價值V2 位運算+枚舉
题意:定义一个区间的价值为:这个区间内的数AND的值 * 这个区间的数OR运算的值.n固定L,增加R,与运算的结果非递增,或运算的结果非递减.并且最多变化log(max(a[i]))=32次.方便模拟 用vector d[j]记录二进制第j位为1的下标, 找a[i]的变化值 只要枚举j之后,在d[j]二分第一个比i大的下标即可.以i为左端点 分别求出两个运算变化的右端点模拟原创 2018-04-28 00:09:57 · 116 阅读 · 0 评论 -
Atcoder 500 Static Sushi 思維
题意:一个周长为C的环. 第i件物品距离原点x[i](顺时针),价值为为v[i].走一单位花费为1.n枚举顺时针拿了i个 逆时针拿个j个(j因为顺时针拿了i个 那么拿逆时针的的距离要么比它大要么比它小.这两种情况都可以用优先队列来维护. val= pre[i]-2x[i] + mx , val=pre[i]-x[i] + mx.#include using n原创 2018-04-28 18:54:21 · 214 阅读 · 0 评论 -
CF 216C. Hiring Staff 构造
题意:若在第x天召唤一个守卫,则该守卫会连续工作n天,然后休息m天.重复以上规律.要求每天至少要有k个守卫,并且至少有一个守卫是来自前一天工作的.n,m,k从x%(n+m)角度来考虑.每个人开始工作的时间为x,x+n+m,..x+k(n+m)第一天必须要k个人.那么x%(n+m)=1,2,3....n的天数一定有k个人工作.那么为了使第n+1天也有k个人.可以安原创 2018-05-07 20:10:39 · 237 阅读 · 0 评论 -
CF 266C. Below the Diagonal 思维+递归
题意:n*n的01矩阵,告诉你n-1个1的位置.其余位置都为0.操作:交换任意两行或者任意两列.n<=1e3.输出操作序列,使得n-1个1的都在主对线以下.虽然是交换任意行和任意列,原本在同一列或者同一行上的1,操作后还是在同行同列.那么n-1个1都在主对角线之下,说明包括主对线线及以上不能有1存在.设t[j]为第j列上有多少个1. 现在通过列交换 将矩阵变为 t[1]>=t[2]&g...原创 2018-05-15 17:22:56 · 219 阅读 · 0 评论 -
Atcoder 600 Range Minimum Queries 思维,优先队列
题意:长度为n的序列a,操作:任意选择一个长度为k的区间,并删除该区间最小的数x,保存到序列b中.1<=k<=n<=2e3, 1<=Q<=n-k+1. 问操作Q次,序列b的最大值-最小值 最小为多少?枚举最小值mn=a[i],此时最大值要最小.因为最小值为mn,那么a[j]<mn的位置j,会把序列分成若干个区间.将这些区间的值用优先队列维护.若队列值>=k...原创 2018-05-28 22:24:51 · 219 阅读 · 0 评论 -
CF Round 487D A Shade of Moonight 思维(相对运动)
题意:x轴上有n条长度为L的线段 第i条线段初始在[xi,xi+L].其初始速度为1或者-1.告诉你最大风速W.若风速为w,则线段速度为变为 v[i]+w.问在风速w不超过W的情况下(可以为负数和小数).有多少对线段(i,j)会在原点相遇?1<=n<=1e5, 1<=l,W<=1e8 . -1e8<=x[i]<=1e8. v[i]={-1,1}.若风速为w,根据...原创 2018-06-19 15:02:03 · 168 阅读 · 0 评论 -
CF Round 239D. Long Path 思维
题意:x轴上有[1,2,3...n]个点.初始在点1.若到达点i时的次数为奇数,则下一次走到p[i].否则走到i+1.n<=1e3. 1<=p[i]<=i. 问要经过多少次才能到达n+1.注意到 1<=p[i]<=i .若第一次到达点i,则说明此时i-1到达次数为偶数次.依次[1..i-2]也是偶数次.若i-2的到达次数不是偶数次 则无法到达i-1.设f[i]:i从到...原创 2018-06-20 11:09:22 · 141 阅读 · 0 评论 -
NEERC-SSC F Debate 思维
题意:n个人,每个人是4种类型的其中一种(00,10,01,11) 不支持A,B.只支持A,只支持B,AB都支持.第i个人的权值为a[i], 要求从n个人中选出一个子集.(假设选出的人数为m)条件1:支持A的人数 2*a>=m.条件2:支持B的人数 2*b>=m.n<=4e5. 1<=a[i]<=5000. 问满足条件时,最大的权值和为多少? ...原创 2018-11-01 18:56:47 · 253 阅读 · 0 评论 -
51nod 40 第K大区间 二分+尺取
题意:定义一个区间的价值为:该区间众数的出现次数 (该区间相同的数最多出现多少次.)给出序列a,将所有区间价值排序后,问第k大的数值为多少?n设cnt[x] 价值为x的区间有多少个? x[1...n] . 如何快速算出cnt[x]???? 想了一会儿 只会暴力算.qwq...设f[x]:价值因为答案是在[1,n]范围内的,令tot=(1+n)*n/2,k=t原创 2017-12-26 16:14:19 · 211 阅读 · 0 评论 -
BZOJ 1029 建筑抢修 贪心(替换)
题意:n个建筑,修理第i个建筑需要a[i]秒 第i个建筑,若在第b[i]秒时还没被修复,则永远无法修复.n贪心:明显先让deadline早的先修,然后排序一下,然后就wa了....如果当前第i个修不了 但是取消已经修过中消耗时间最大的,然后用当前a[i]来代替.若第i个变为可行,则维修个数不变 并且当前时间缩短.显然更优,用优先队列维护即可 (好骚的操作.)#include原创 2017-09-14 16:44:37 · 244 阅读 · 0 评论 -
CF 244 C. The Brand New Function 思维(二进制,区间或运算不同结果)
题意:给出序列a,f(l,r)=a[l] | a[l+1] |....|a[r] ('|'为或运算) n枚举左端点直接计算O(n^2)当左端点固定时,右端点增大,或运算的结果result是非递减的.并且每次增加都是 二进制某些个位变成1.d[L][i],对a[L]预处理出它后面第一个,二进制第i位为1的位置.d[L][i]=(a[L]>>i)&1?L:d[L+1][i]原创 2017-10-09 17:41:50 · 410 阅读 · 0 评论