
【思维】
WangMeow
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #329 (Div. 2) A. 2Char ---- 思维+STL
题目传送门做法:一次性用两个不同的字符去枚举所有串即可,找到最大的AC代码:跟超霸学的一手好写法( ゚∀゚) #include<bits/stdc++.h>#define IO ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)#define pb(x) push_back(x)...原创 2018-09-27 15:27:53 · 104 阅读 · 0 评论 -
【ACM-ICPC 2018 北京赛区网络预赛】B题Tomb Raider ---- 状态压缩+思维★
题目传送门题意:找出这n个串的最长公共子序列,我们把每个串都看成环,子序列可以从环中找出。 其中要保证公共子序列的字典序最小。 比如: abcdefkedajceu 其中他们的公共子序列是 acd 做法:每个串的长度最多不超过8,最多10组数据,显然我们可以通过状态压缩枚举子集找到所有的子串。 由于每个串是环状的,所以我们把串加倍,模拟成环,枚举第一个串s1所有...原创 2018-09-22 19:53:28 · 478 阅读 · 0 评论 -
Codeforces Round #511 (Div. 2) C. Enlarge GCD ---- 思维+素数筛
题目传送门题意:让你删除一些数,使得剩余数的gcd尽可能大。做法:这里需要用思维想一下(`・ω・´) 我们先求出原来n个数的gcd,我们把每个数除以这个gcd得到的新的n个数他们有什么特征嘞? 对,他们这n个数,没有公因子了,但是两个数之间,三个数之间……都还可能存在它们的公因子 那么什么才会使原gcd变小,没错,互质的! 所以这个问题就转换成什么了呢?保留最多的数,使得这些...原创 2018-09-22 22:18:25 · 350 阅读 · 1 评论 -
[UPC](9517)Princess Principal ---- 并查集+栈+技巧离线查询
题目传送门做法:我们发现,满足题意的区间有以下情况: 1. [ ( ) ] 2. [ ] ( ) 3. ( ) ( ) 学过数据结构的童鞋都知道利用栈实现括号匹配。同理这个题的解法也是离不开的。 我们把满足题意的区间下标加到并查集里面,然后离线查询就可以判断该区间是不是合法的。 但是,我们要注意这种情况 -----> () () (...原创 2018-10-08 17:55:28 · 157 阅读 · 0 评论 -
Codeforces Round #516 (Div. 2) D. Labyrinth ---- BFS+思维
题目传送门做法:优先选取列,然后在向左右扩展。然鹅,有思路,却不会处理,看了本场Rank1,有双端队列巧妙处理列和行的优先级,才发现处理更简洁+易懂。ORZ我们优先将列放到队首,因为列是不需要消耗步数的,然后再将左右放到队尾,然后依次访问+标记,即可。AC代码:#include<bits/stdc++.h>#define IO ios_base::s...原创 2018-10-15 12:46:24 · 159 阅读 · 0 评论 -
[Codeforces-Gym] (101550C)Card Hand Sorting ---- 状态压缩+思维
题目传送门题意:给你一副扑克牌,其中不包括大王和小王,共52张,即4*13 有四种花色分别定义为s,h,d,c 然后扑克牌的数字从2~9 大小定义为依次从小到大,剩下的大小为A>K>Q>J>T>9 现在给你n张扑克牌,让你给他们排好序,注:这种排序不是交换相邻的那种,而是可以选择一张插入到某个位置 排序的要求是:同一类型的扑克牌按照降序或升序排列,不同...原创 2018-10-09 17:12:02 · 183 阅读 · 0 评论 -
【ACM-ICPC 2018 青岛赛区网络预赛】H. Traveling on the Axis ---- 前缀和+规律
题目传送门做法:我们很容易推出,对于每一个位置到终点,先判断起始位置是1or0,是1初始化为1,是0初始化为0从当前位置往后相邻两项如果不一样,那么+1,如果一样+2举个例子:1 0 11位置: 1 1+1 1+1+12位置: 2 2+13位置: 1ans = 1+2+3+2+3+1 = 12然后多写几组数据,我们发现后一项是前一...原创 2018-10-19 21:22:13 · 216 阅读 · 0 评论 -
【ACM-ICPC 2018 南京现场赛 】 J.Prime Game ---- 思维+素数筛
题目:做法: 计算出来每个数的质因子在各个区间的贡献。以第二组样例为例:第一个元素的素因子2:它能贡献的区间有[1,1],[1,2],……,[1,10] 10个区间第一个元素的素因子3:它能贡献的区间有[1,1],[1,2],……,[1,10] 10个区间当前sum = 10+10第二个元素的素因子7:它能贡献的区间有[1,2],[1,3],……,[1,10] 9个区...原创 2018-10-22 17:47:45 · 1648 阅读 · 2 评论 -
[牛客]牛客国庆集训派对Day2 F.平衡二叉树 ---- 递推 or 记忆化搜索
题目传送门做法:其实一开始推东西,推的太细了反而里通解越来越远~ _(:з」∠)_首先要满足最优解,我们可以把最大的左子树看成满二叉树,然后去想右子树是怎么构造的即可。这棵右子树,它的左右子树必定满足结点之差<=d,且左右之差为d的时候最优,那么递归定义其左子树dp[h-1],右子树dp[h-1-d]。我们发现d>=h时,f[h] = h 为最优解。于是有了以下递推式...原创 2018-10-26 11:44:56 · 143 阅读 · 0 评论 -
【ACM-ICPC 2018 焦作赛区网络预赛】L. Poor God Water ---- 矩阵快速幂 or 杜教BM算法
题目传送门做法:我们设(肉,鱼,巧) —&amp;gt; (0,1,2)f(i,j,k) i表示第i小时,j表示当前状态,k表示上一状态 j,k ∈\in∈ (0,1,2)从n = 3 开始,我们利用后两项推前一项可得f(i,0,0)=f(i−1,0,1)+f(i−1,0,2)f(i,0,0)= f(i-1,0,1) + f(i-1,0,2)f(i,0,0)=f(i−1,0,1)+f(i...原创 2018-10-26 22:19:26 · 256 阅读 · 0 评论 -
[51Nod] (1102) 面积最大的矩形 ---- 单调栈(思维)
题目传送门思路:自己的想法跟题解一样,也是从左右两边找到最远能扩展的位置。但这样复杂度一定是O(n^2)显然会超时,于是自己发现除了这个思路没有好办法了,于是去学习一波新技能√ ---- 单调栈!单调栈其实精湛的不是用栈去实现,而是一种思维,用这种单调的思维去降低复杂度。以这个题为例,我们可以给每个位置pos,记录它向右最远的扩展距离R[pos],向左最远的扩展距离L[pos]。举个...原创 2018-11-18 17:12:43 · 171 阅读 · 0 评论 -
[51Nod] (1521) 一维战舰 ---- 思维+二分
题目传送门思路:看了一大会儿没有思路,这类区间问题确实很需要想象力!QAQ 我发现这类算法题,我不由自主地给它做加法,从而导致思维混乱(痛苦阴影其实这类题目,要给它做减法。 我们每查询一个编号所对应的方格,一定控制着某段区间,这段区间必被视为不可用。如果它不合法,一定是因为它在所有情况下都必被战舰覆盖。除了它占用的空间外,那么剩余的区间如果不能放的下k个战舰,那么证明此次查询一定不合法。...原创 2018-11-14 18:11:23 · 196 阅读 · 0 评论 -
[51Nod] (1279) 扔盘子 ---- 贪心+思维(逆向)
题目传送门思路:试图藐视平台数据,正向思维模拟,暴力无果_(:з」∠)_ 。 需要复杂度更低的做法~如果盘子能落到井的位置pos,那么pos之前的井口的宽度一定>=pos位置的井口的宽度。所以贪心的思想,我们可以把井口自底向上维护成一个不下降的序列。然后我们逆向思维,从底部向上填充盘子,这样所得的答案最优。AC代码:#include<bits/stdc++.h>...原创 2018-11-14 21:12:55 · 255 阅读 · 0 评论 -
[51Nod] (1097) 拼成最小的数 ---- 排序+思维
题目传送门思路:把数看成字符串,数a和数b,ab与ba比较大小即可。这里巧妙的地方就是借助了STL,cmp函数 return a+b&lt;b+a;即可 QAQAC代码:#include&lt;bits/stdc++.h&gt;using namespace std;#define IO ios_base::sync_with_stdio(0),cin.tie...原创 2018-11-16 16:51:18 · 175 阅读 · 0 评论 -
[51Nod] (1247) 可能的路径 ---- 思维+欧几里得
题目传送门思路:求解的时候,往扩展gcd的方向去了QAQ,WA 3 放弃看到一个巨巨的神之推导。(a+b,b) ,(a-b,b),(a,a-b),(a,a+b) 这四个方向都可以推到(a,b)。(证明可逆)例如: (a,a-b) -> (a-(a-b),a-b) -> (b,a-b) -> (b,a-b+b) -> (b,a) -> (b+a,a) -&g...原创 2018-11-28 18:00:50 · 288 阅读 · 0 评论 -
Codeforces Round #327 (Div. 2) B. Rebranding ---- 思维+STL
题目传送门做法:用vector 把每个字母的相应下标保存好,然后swap交换即可 然后自己忘记了swap可以交换容器的迭代器,自己应用结构体写了一个类似vector的东西,来实现交换,结果时间被卡。 一查,发现swap交换迭代器的复杂度非常低,它是直接交换数据所在的内存空间地址,而不是交换数据,节省了空间消耗和时间 _(:з」∠)_ AC代码:#include<bi...原创 2018-09-27 15:21:15 · 158 阅读 · 0 评论 -
Codeforces Round #463 (Div. 1 + Div. 2, combined) C. Permutation Cycle ---- 思维+扩展欧几里得
题目传送门做法:题目中给的函数式递归定义的,递归终点是j为min时 f(i,j) = i 我们从样例中要规律,发现每个点都有某个确定的周期里面。 比如 6 5 8 3 4 1 9 2 7 6 ----> 1 1-----> 6 周期为2 即函数所表达的也是这个意思 接下来就需要抽象了,我们把1~n这几个数字抽象成图中的顶点,每个顶点的出度为1,入度也为1 这酱紫...原创 2018-09-21 17:13:38 · 154 阅读 · 0 评论 -
[51Nod](1087) 1 10 100 1000 ---- 模拟+STL(map)
1,10,100,1000…组成序列1101001000…,求这个序列的第N位是0还是1。Input第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 10000) 第2 - T + 1行:每行1个数N。(1 <= N <= 10^9)Output共T行,如果该位是0,输出0,如果该位是1,输出1。Input示例3 ...原创 2018-03-20 21:10:17 · 195 阅读 · 0 评论 -
[51Nod](1413)权势二进制(Codeforces Round #300 B. Quasi Binary) ---- 思维+贪心
一个十进制整数被叫做权势二进制,当他的十进制表示的时候只由0或1组成。例如0,1,101,110011都是权势二进制而2,12,900不是。当给定一个n的时候,计算一下最少要多少个权势二进制相加才能得到n。Input单组测试数据。 第一行给出一个整数n (1<=n<=1,000,000)Output输出答案占一行。Input示例9Out...原创 2018-04-10 13:23:47 · 182 阅读 · 0 评论 -
[51Nod](1596)搬货物 ---- 思维
现在有n个货物,第i个货物的重量是 2^wi 。每次搬的时候要求货物重量的总和是一个2的幂。问最少要搬几次能把所有的货物搬完。样例解释:1,1,2作为一组。3,3作为一组。Input单组测试数据。 第一行有一个整数n (1≤n≤10^6),表示有几个货物。 第二行有n个整数 w1,w2,…,wn,(0≤wi≤10^6)。Output输出最少的运货次数。I...原创 2018-04-16 19:51:11 · 162 阅读 · 0 评论 -
[AtCoder](2697)Coloring Dominoes ---- 思维(规律)
题目链接思路: 一开始知道这应该是道找规律的题目,但是想的特别复杂,考虑了很多情况。但是在以前杭电做过一道很简单的递推,就想起来可以把这种模型转换成两种情况。 第一种情况:一个竖的多米诺,这里简称为X 第二种情况:两个横着叠在一起的多米诺,这里简称为Y第一种情况涂颜色有3种 第二种情况涂颜色有6种现在我们讨论一下四种情况: (1)X->X (即在X右边添加X),画图可知有...原创 2018-07-28 15:21:48 · 243 阅读 · 0 评论 -
[AtCoder](3621)Small Multiple ---- 思维+BFS
Problem StatementFind the smallest possible sum of the digits in the decimal notation of a positive multiple of K.Constraints2≤K≤105 K is an integer.InputInput is given from Standard Input i...原创 2018-08-06 10:17:39 · 322 阅读 · 0 评论 -
[洛谷](P1631)序列合并 ---- 优先级队列+思维
题目链接思路: 我们会发现题意要求的是最小的N个数,1e5直接暴力肯定会TLE。这时候换种思路。我们把a和b两个序列从小到大排序,发现一定是a[i]+b[j] < a[i]+b[j+1]所以可以用优先级队列维护一下枚举一下,把大和的弹出去,否则从内层跳出,因为后面的就一定不会出现小的和了(根据上面的不等式)最后逆序输出即是答案。 AC代码:#incl...原创 2018-08-10 19:20:20 · 275 阅读 · 0 评论 -
Codeforces Round #501 (Div. 3) ---- B. Obtaining the String (冒泡排序)
题目链接做法:固定住S2串的位置,然后从S2的每i个位置找S1串中与i位置对应的字符,找到了,与前面的交换(冒泡一次)。蒟蒻……AC代码:#include<bits/stdc++.h>#define rep(i,s,t) for(int i = (int)(s); i <= (int)(t); i++)#define rev(i,t,s) for(int i...原创 2018-08-13 09:59:59 · 150 阅读 · 0 评论 -
[HDU](6395)Sequence ---- 矩阵快速幂+分块
题目链接做法:一开始推出了和正确题解一样的基础矩阵,可是自己想的太局限,没有想到分块的思想。还是缺乏练习呀!具体做法,就是我们先把一部分的用O(1)的递推式计算好,然后后面的按照每相同的p/n 进行分块,然后这样就不会错了。 参考题解:https://www.cnblogs.com/DynastySun/p/9470717.html#include<bits/stdc++....原创 2018-08-13 23:04:54 · 166 阅读 · 0 评论 -
[UPC](8840)Medical Checkup ---- 思维
题目链接Hint: ICPC 2017 Japan Tsukuba题意:有n个同学排成一队,要去体检1,2,3,4,……等等几个体检项目,同学的编号也是1,2,3,…… n 要求:必须要个遵守同学的编号进行项目体检。允许多个项目同时进行。 问当时间到达t的时候,各个同学都在体检或等待体检那个体检项目,输出这些体检项目的编号。做法:这个题,要动脑筋稍微想一下……而我的脑筋却想成...原创 2018-08-29 21:36:17 · 353 阅读 · 0 评论 -
[UPC](7221)Flower ---- 逆向思维+规律 ★
题目链接Hint: 2018黑龙江省赛 做法:比赛时,和小伙伴被这个题卡了一个半小时……赛后又跟超霸学习到了_(:з」∠)_ 首先,我们知道可行的解一定是1 x x x x …… 由一不定的情况去找可行解复杂,但由可行解去逆推初始情况,找规律,是非常机智的~ 比如:1 2 2 2 2 我们每次随便固定一个数不变,变成2 2 3 3 3 ----> 3 2 4 4...原创 2018-09-04 20:55:51 · 441 阅读 · 1 评论 -
【ACM-ICPC 2018 徐州赛区网络预赛】G题 Trace ---- 思维
题目链接做法:很好的一个思维题 题意向我们保证当前的浪花的痕迹不会完全覆盖之前的浪花的痕迹,所以我们要逆向思维,倒着来,从最后的浪花的痕迹往前思考。如果能找到第一个比当前浪花痕迹短的,那么保留的痕迹就是当前的痕迹-第一个比当前短的浪花的痕迹 否则,它的痕迹如果是最小的,那么直接加入答案。 这个题用STL写的话,利用一个set,然后二分查,就非常容易理解。AC代码:#inclu...原创 2018-09-11 19:44:29 · 185 阅读 · 0 评论 -
【ACM-ICPC 2018 南京赛区网络预赛】J题 Sum ---- 积性函数线性筛+思维★
题目链接做法:通过打表找规律,我们发现所有情况可以分为三类。我们把一个n 设为 n = p^k * x (p为质数),这里的x可能为质数也可能为合数 注:如果x与p互质,满足积性函数的性质,f[n] = f[p]*f[x] 筛法: 1.f[p] = 2 ,f[p^2] = 1 2.若i % p!=0,f[i * p] = f[i] * f[p] 积性函数 3.若i % (p * ...原创 2018-09-03 21:16:48 · 206 阅读 · 3 评论 -
[POJ](2309)BST ---- 树状数组lowbit
题目传送门做法:其实还是从题目中给的这棵二叉搜索树找规律,我们发现最小的其实就是 x-lowbit(x)+1,即树状数组中x位置所维护的区间的左端点,接机推出最大即x+lowbit(x)-1;AC代码:#include <iostream>#include <cmath>#include <cstdio>#include <algori...原创 2018-09-17 19:28:36 · 190 阅读 · 0 评论 -
Codeforces Round #464 (Div. 2) C. Convenient For Everybody ----- 思维+前缀和
题目传送门题意: 注意题目中没有0:00时 以及 s,f 的区间指左闭右开区间[s,f] 即可做法:就是找一段长度为 f-s-1的连续区间,使得这段区间的和最大,由于具有时间特性,所以要注意时间成环状的问题,所以我们在处理的时候,加倍处理即可。 比如: 1 2 3 4 1 -----> 1 2 3 4 1 1 2 3 4 1 自己脑子zz,居然写成了二分,这样容易错失最小...原创 2018-09-23 15:38:01 · 219 阅读 · 0 评论 -
Educational Codeforces Round 37 (Rated for Div. 2) A. Water The Garden ---- 思维
题目传送门做法:枚举每个花床,看看哪个水龙头离他最近,然后找出能保证覆盖所有的水龙头即可。即就是先最小再最大。AC代码:#include<bits/stdc++.h>#define IO ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)#define pb(x) push_back(...原创 2018-09-19 17:58:08 · 142 阅读 · 0 评论 -
[51Nod](1049)最大子段和 ---- 思维
N个整数组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的连续子段和的最大值。当所给的整数均为负数时和为0。 例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13。和为20。Input第1行:整数序列的长度N(2 <= N <= 50000) 第2 - N + 1行:N个整数(-10^9 <...原创 2018-03-15 20:22:51 · 177 阅读 · 0 评论