思维
Cry_Kill
坚持自己的梦想
展开
-
计蒜客2018蓝桥杯省赛B组模拟赛一
A. 结果填空:年龄 答案:1 思路:直接暴力遍历就好了#include #include #include #include #include #include #include #include #include #include #include #define N 1010using namespace std;int main() { ci原创 2018-01-21 22:48:23 · 828 阅读 · 0 评论 -
Codeforces 842 B Gleb And Pizza
题目地址 题意:有一个披萨上面有很多火腿,因为披萨是有外面一圈壳的,问你有多少火腿完全在壳上面,其实题目下面给的图说的很清楚了。 思路:计算出属于壳的半径范围,然后从火腿的圆心出发,到披萨的圆心的距离加上火腿的半径减去火腿的半径都在壳的半径范围以内就让一个变量加一就好了。最后输出变量。原创 2017-09-01 17:24:33 · 390 阅读 · 0 评论 -
Codeforces 842 A Kirill And The Game
题目地址 题意:给你两个区间l~r,x~y,问l~r这个区间中有没有可以整除k的数,并且得到的数在x~y这个区间里面的。 思路:暴力枚举每一个x~y的区间,因为是整除所以就转化为乘法,当x~y中有一个数乘上k在l~r这个区间中的话那就是有的了。原创 2017-09-01 17:18:27 · 421 阅读 · 0 评论 -
HDU 6188 Duizi and Shunzi(贪心+细节)
题目地址 题意:给你一堆牌,有两种组合方式,问最多能组合成多少个对子和顺子(同牌面的2张可以组成一个对子,连续牌面数字的3张可以组成一个顺子) 思路:这题是贪心写的,我昨天虽然想到了这种方法,但是因为急并且思路比较混乱导致一直在wa我就没写了,今天重新理清了一下思路。这题的贪心思想是:我们存下每个牌面有多少张,然后从前到后去判断,当这个牌面有大于等于2张的时候,无论如何先组成对子,因为对子的代价原创 2017-09-01 17:12:28 · 1002 阅读 · 0 评论 -
HDU 6186 CS Course
题目地址 题意:给你一个序列,然后m次查询,每次查询告诉你一个下标,然后你输出除了这个下标的数以外的所有数字的与,或,异或的结果。 思路:与,或的结果通过前缀和后缀的思想可以一次计算得到,然而异或的结果因为自己异或自己得到的结果就是0,所以只要整个序列的异或再异或那个下标的数就好了。(详细看代码,很好理解的)原创 2017-08-31 18:01:05 · 299 阅读 · 0 评论 -
HDU 6216 A Cubic number and A Cubic Number(思维)
题目地址 题意:给你一个素数num,求有没有两个立方数的差是这个素数。 思路:只有两个相邻的立方数的差是素数,所以我们枚举出每一个差,记录在数组里面,然后通过二分查找,看看能不能查到这个数就好了。原创 2017-09-17 23:37:08 · 466 阅读 · 0 评论 -
HDU 6206 Apple(高精度浮点数)
题目地址 题意:告诉你四个点,求最后一个点在不在前三个点围成的圆上。 思路:三个点连成的形状是一个三角形,那那个圆就是这个三角形的外接圆,那圆心应该就是在三角形的外心上,给定三角形三个顶点的坐标,如何求三角形的外心的坐标呢?我在网上找到的公式: 给定a(x1,y1) b(x2,y2) c(x3,y3)求外接圆心坐标O(x,y) 1. 首先,外接圆的圆心是三角形三条边的垂直平分线的交点,原创 2017-09-17 22:55:12 · 891 阅读 · 0 评论 -
HDU 2424 Gary's Calculator(细节)
题目地址 题意:告诉你一个表达式,要你判断是不是合法的表达式,如果是则输出结果。 思路:这题目就是有几个坑而已。 1、这题的运算符号一定是在偶数位,数字一定是在奇数为,如果不是,则说明表达式不正确。 2、注意数据范围,虽然说给出的数字都在10^9以下,但是有乘法,所以这题一定要用高精度(高精度模板) 3、有个优化,就是如果n是偶数的话就一定是不合法的表达式。详细看代码原创 2017-08-31 00:12:00 · 310 阅读 · 0 评论 -
HDU 2418 Another Easy Problem(模拟)
题目地址 题意:给你n个学生的编号(string),m门课的班级编号,班级容量以及上课时间,q个选课请求,问有多少个请求可以达成(两门课的时间不能重叠才能选)。选课顺序是要按照课程在input出现的顺序排序,相同课程的按请求出现的顺序排序。 思路:就直接模拟,要注意细节,我就是排序规则函数里面把id写成了sx,WA了一个小时,这种题目仔细就好了,详细看代码原创 2017-08-31 00:05:14 · 396 阅读 · 0 评论 -
Codeforces 846 D Monitor(类似求面积的前缀和)
题目地址 题意:你有一个n*m的屏幕,有q个像素点会长time[i]的时间后变为坏点,当屏幕中有一个k*k的矩阵里面都是坏点的话,这块屏幕就坏了。问最少什么时间以后屏幕就坏了(PS:记住是坏了,而不是没坏),如果不存在坏的就输出-1。 思路:二分经过了多少时间后屏幕坏了,但是怎么找到这个k*k的矩阵呢?我们通过面积计算以及前缀和的思想,如果这个点在这个时间会坏就把mapp[i][j]赋为1,表明原创 2017-09-08 12:22:15 · 383 阅读 · 0 评论 -
Codeforces 854 D Jury Meeting(前缀和后缀)
题目地址 题意:从1~n的城市的领导要去0号城市开会,一定要全部到齐了才能开始开会,会议要开k天,给你一个每个航班的飞机票,问最小的花费是多少,如果有领导不能来或者不能走会都不能开,只能输出-1。 思路:我们通过前缀和后缀的思想,把每个时间开会和散会的代价算出来,这就是类似于前缀和的思想,当该天没有算出来,就继承前一天的代价。这样我们就能得到一个表表明了所有天数开会和散会的代价,这样最后枚举一下原创 2017-09-08 00:00:34 · 493 阅读 · 0 评论 -
Codeforces 846 C Four Segments(前缀和+枚举)
题目地址 题意:给你一个序列,定义一种运算sum(a,b)=num[a]+…+num[b-1],注意sum(a,a)=0。让你求出最大的res=sum(0, delim0) - sum(delim0, delim1) + sum(delim1, delim2) - sum(delim2, n) 时的delim0,delim1,delim2。 思路:用前缀和去节省每一次求区间和的时间,因为当a,b原创 2017-09-07 12:42:53 · 808 阅读 · 0 评论 -
Codeforces 854 B Maxim Buys an Apartment
题目地址 题意:告诉你一个小区,里面有n间房子,只有有邻居的房子才能是好房子,现在告诉你有m间房子卖出去了,但是不知道房子的位置。让你求出好房子的最大数量和最小数量。 思路:最好的情况只有当n - m > m * 2时他才可能会有房子不是好房子(看下图),如果小于的话那剩下的房子都是好房子。最坏的情况就是全部靠边站,那就是1了。有两种情况需要特判,应该是房子全部卖出去了(n==m)或者没有房子卖原创 2017-09-06 23:10:57 · 491 阅读 · 0 评论 -
Codeforces 854 A Fraction
题目地址 题意:有个人要算出一个不可约分数的值,但是他一不小心吧除号打成了加号得到了一个n,让你求出最大的不可约分数a/b(a+b==n) 思路:因为a+b==n,但是a!=b所以a/b想最大,只能a和b越接近越好,所以从那个值开始出发,a–,b++直到gcd(a,b)==1说明他们是不可约分数就输出。原创 2017-09-06 22:55:34 · 489 阅读 · 0 评论 -
Codeforces 846 B MAth Show
题目地址 题意:你要运行n次大程序,每个大程序里面有m个小程序,运行程序不用管顺序,可以随意运行,只要每个小程序运行不超过n次就好了。每运行完一个小程序你可以加1分,运行完一个大程序可以附加1分。问在t的时间内,最大的分数是多少? 思路:因为数据范围比较小,所以直接暴力就好了,O(n^2)的算法。先给每个小程序的耗时排序,每次枚举完整运行多少个大程序,先把这些算完,然后剩下的就让最短时间的小程序原创 2017-09-06 19:55:21 · 509 阅读 · 0 评论 -
Codeforces 851 C Five Dimensional Points(数学概念优化)
题目地址 题意:给你n个五维空间的点,求出有多少个点他与任意两点连成的线段的夹角不是锐角的。 思路:要通过一个数学空间上的概念:五维空间理论上只有5条互相垂直的直线,若一个点为好点,该空间最多只有11个点(五条垂线的交点为好点,其他的点分别在每条垂线上,即5*2+1)。所以说超过了11个点就直接输出0就好了,如果小于3都不能构成三个点所以全部都是,其他的呢?总共才11个点直接暴力求就好了,求每个原创 2017-09-06 10:11:48 · 452 阅读 · 0 评论 -
Codeforces 851 B Arpa and an exam about geometry
题目地址 题意:给你3个点的坐标,问在这个平面内能不能找到一个点,3个点围绕这个点同时选择同一角度,使得旋转以后a点在原来b点的位置,旋转以后b点在原来c点的位置。 思路:画图就会发现,只有当这三个点在同一个圆上面,并且ab==bc就是可以找到的。因为在圆上面等长的弦对应的弧是等长的,绕圆心旋转是一定能重合的。看下图: 然后因为是圆,所以不能为同一斜率,记住最好不要用double,因为如果原创 2017-09-06 10:06:48 · 352 阅读 · 0 评论 -
Codeforces 851 A Arpa and a research in Mexican wave
题目地址 题意:你有n个人的一排,你要做出一个长为k的人浪,问第k秒的时候有多少个人站着。 思路:该题目就只会出现3种情况:1、t<=k的时候,当前的人数为t2、当t>n的时候,当前的人数为k-(t-n)3、否则,当前的人数为n判断这3种情况就好了。原创 2017-09-05 20:22:24 · 446 阅读 · 0 评论 -
HDU 6195 cable cable cable
题目地址 题意:给你n个屏幕,以及m个信号源,想让一个屏幕播放一种信号源需要一根电缆,然后让你在n个屏幕中选m个屏幕,使得每个屏幕播放的是不同的信号源,问最少要多少根电缆才能达成这个条件。 思路:我们想要达成这个条件,就是让其中m个屏幕对应m个信号源,每个用一根电缆连接,剩下的因为要满足要求,所以要每个屏幕都要与每个信号源相连,所以剩下的每个屏幕要m个电缆。原创 2017-09-11 00:26:14 · 347 阅读 · 0 评论 -
HDU 6205 card card card
题目地址 题意:给你n堆牌,原本每一堆的所有牌(a[i]张)默认向下,每次从第一堆开始,将固定个数的牌(b[i]张)翻上,然后下一堆继续,直到没有足够的牌翻上,然后你可以获得当前已经操作过的堆的所有牌。最初你可以调整堆的顺序,把第一堆放到最后一堆(逆时针旋转),你可以重复这个操作,问你要重复多少次这个操作,才能获得最多的牌。原创 2017-09-11 00:41:40 · 528 阅读 · 0 评论 -
Codeforces 876 C Classroom Watch
题目地址 题意:给你一个数num,问你有多少个数他的数字加上每一位的数字的和为num。 思路:我们可以发现想要等于num肯定是小于等于他的。然后我们发现数据范围为10^9,暴力枚举是肯定不行的,然后我们发现最大的数位和应该是9个9为81,所有要不我们就是从1开始,要不然就是从n-81开始枚举就好了,所有最多就是要枚举81个数就好了。原创 2017-10-17 09:24:00 · 558 阅读 · 0 评论 -
Codeforces 876 B Divisiblity of Differences
题目地址 题意:给你n个数,让你从中选出k个数来,使得k个数中任意两个数的差为m的倍数。问能不能选出来。 思路:把所有数对m取余,同样余数的数之间的差为m的倍数,所有我们只要判断有没有一个余数的数字数量大于k就好了。原创 2017-10-17 00:03:21 · 417 阅读 · 0 评论 -
Codeforces 876 A Trip For Meal
题目地址 题意:告诉你一个三角形路径长度,你每次要去蹭饭,但是不能连续两餐到一家蹭饭,你要从Rabbit家出发,问你蹭足n顿饭最少要走多少路。 思路:因为只是连续两餐不能在一家吃饭,我们只要不断在最短的路上来回吃饭就好了,但是我们要特判下最短的是不是在第三条路上,如果在我们只要在第一条和第二条中选较短的一条到那个起点就好了。原创 2017-10-16 23:59:22 · 366 阅读 · 0 评论 -
Codeforces 877 C Slava and tanks
题目地址 题意:给你一家飞机,以及一个1*n的地图,每个格子里面有若干个坦克,每个坦克要被轰炸两次才能毁灭,如果坦克受到了伤害的话,他就会移向旁边的格子,问你轰炸多少次才能把所有坦克消灭掉。 思路:很容易想到我们先轰炸偶数的序号的格子(因为可能会比奇数格少一个),然后所有坦克就会到奇数格了,然后我们再轰炸一边偶数个,这样的话,原来在奇数格的坦克就都会到偶数格上去,原本在偶数格的就会被消灭,最后我原创 2017-10-25 13:32:06 · 642 阅读 · 2 评论 -
Codeforces 877 B Nikita and string
题目地址 题意:给你一个字符串让你删除一些字符,使得可以分割成3个字符串,第一,三个全是a,第二个全是b,这个删完的字符串最长多少? 思路:我们遍历字符串,如果当前字符为a,那我们可以构成a或aba,如果是b的话,那就是可以构成ab的,然后每次遍历之后我们要转移,因为我们发现当前是a的我们可以继续构成a或者ab,ab的我们可以构成aba或者ab,所以我们对于ab就取ab和a的较大者aba就取ab或者aba的较大者原创 2017-10-25 12:44:03 · 686 阅读 · 0 评论 -
Codeforces 872 A Search for Pretty Integers
题目地址 题意:给你两个集合a和b,容量分别为n和m,让你求出最小的数,包含了a中的一个数以及b中的一个数。 思路:排序+标记,我们先看有没有同时在a和b中出现的数,如果有的话,选最小的一个同时出现的数输出,如果没有的话就是把a和b集合分别排序,去每个集合中的最小值出来,然后二者的最小值当第一位,大者当后一位。原创 2017-10-16 13:26:31 · 383 阅读 · 0 评论 -
Codeforces 872 B Maximum of Maximums of Minimums
题目地址 题意:给你一个序列,然后让你把这个序列正好分割为k个子序列,每个子序列都选出一个最小值,然后求这些最小值的最大值为多少。 思路:这题就是考细节的,我在比赛中被hack了两次,然后最后一次hack还是在比赛结束以后的重测中。言归正传,我们可以发现存在以下的三种情况:m==1,这时候因为只能选1个子序列就是原序列了,所以就是输出最小值了。m==2,这时候我们可以发现要分割为两个集合,所原创 2017-10-16 13:26:02 · 603 阅读 · 0 评论 -
Codeforces 872 C Maximum splitting(规律)
题目地址 题意:给你T个查询,每次查询告诉你个数字num,问这个数字最多能被几个合数相加组成。 思路:其实我们能发现,能用到的基础合数就是4,6,9,因为对于8来说你都可以用2个4去组成了,何必用一个8呢,所以我们就用4为底去求模。我们就会发现有这些情况:余数为0,全部由4组成余数为1,需要两个4去组成9,这样就牺牲了一个数余数为2,需要一个4去组成6,这样就不会增加或者减少数余数为3,原创 2017-10-16 13:24:38 · 439 阅读 · 0 评论 -
Codeforces 868 D Huge String
题目地址 题意:给你n个字符串(0和1),然后给你m次操作,每一次操作都是把两个字符串拼接起来得到的一个新的字符串放入数组n+i的位置上,然后判断出这个新的字符串包含的最长0和1的全排列(全部)。 思路:看了别人的说法才知道可以直接暴力枚举,每次把字符串拼接起来,放入最后一个位置,再对这个字符串直接通过位运算来生成长度为K的全排列,看这个子字符串是不是拼接字符串的子串。然后把最大的k与拼接的两原创 2017-10-21 14:41:59 · 316 阅读 · 0 评论 -
HDU 1593 find a way to escape(角速度)
题目地址 题意:中文 思路:我们要知道当角速度相同的时候,两个人移动的速度是相同的,然后我们就从圆心出发,因为圆心的角速度是无限大的,然后找到角速度相同的圈,然后我们就走直线,最快的速度到达边界,然后因为前面角速度领先,这样的话就可以让elnil的位置到最后终点的长度为半圆,然后我们比较这两个时间就好了。原创 2017-10-28 23:42:54 · 331 阅读 · 0 评论 -
Codeforces 873 D Merge Sort(归并排序性质)
题目地址 题意:要你给出一个长度为n的序列,这个序列满足进行m次归并排序的递归,可以得到一个有序的序列。 思路:这题考察了归并排序的性质,归并排序的次数肯定是奇数的,因为第一次是没有二分区间的,所以是1次,然后二分所以每次都是两次,并且归并排序递归的次数最多是2*n-1。然后因为归并排序要扫一遍区间,当这个区间不是有序的就需要二分,所以我们交换二分区间的两个临界点mid-1和mid,这样的话这个原创 2017-10-19 22:17:02 · 375 阅读 · 0 评论 -
Codeforces 849 C From Y to Y
题目地址 题意:告诉你一个数n,让你求出一个字符集拼接成一个字符串的最小代价为n。(每次选择2个字符串,他们所要的代价是2个字符串中相同字符个数的乘积的和) 思路:可以发现{a,a,a,a}这个集合最后要变成aaaa字符串的代价最小为0+1+2+3,就可以发现直接顺序去找,当再加上一个当前字符的代价超过了剩余代价的时候,就换下一个字符,这样因为下一个字符没有出现过,所以代价又开始重新计算了,这样原创 2017-09-02 09:49:10 · 559 阅读 · 0 评论 -
Codeforces 849 B Tell Your World
题目地址 题意:告诉你一个长度为n的序列,每位的值代表的就是(i,num[i])这个点,问这些点能不能连成两条平行的直线。 思路:通过暴力枚举num[1]-num[0], num[2] - num[1],num[2] - num[0])/2这3种情况,如果能有两个平行的直线那这里面一定是至少有一个是斜率的,然后通过得的斜率求枚举每一个值,看是不是有两个起点,为什么至少有一个是斜率呢,因为如果是真原创 2017-09-02 09:27:12 · 716 阅读 · 0 评论 -
Codeforces 849 A Odds and Ends
题目地址 题意:给你一个序列问你能不能将其划分为奇数个非空的子段,每个子段具有奇数长度,以奇数开头和结尾。 思路:num[0]和num[n-1]一定要是奇数这个肯定很容易理解,因为是要划分为奇数个非空字段,奇数个奇数相加还是奇数,所以字段加起来的和一定是奇数,所以直接判断就好了。·原创 2017-09-02 09:17:13 · 400 阅读 · 0 评论 -
HDU 6198 number number number(规律+矩阵快速幂)
题目地址 题意:在斐波那契数列中找到k个数,让这几个数相加的得到的数不是说斐波那契数列数列里面的数。 思路:打表就能发现,这个数是斐波那契第2*k+3项-1,所以直接矩阵快速幂解决就好了。原创 2017-09-11 11:19:02 · 236 阅读 · 0 评论 -
Codeforces 842 D Vitya and Strange Lesson
题目地址 题意:告诉你一个序列,然后给你m个操作,每个操作就是把这个序列异或上x,然后再得出最小的没有在这个序列中出现的数。 思路:因为异或的定义就是转成2进制的形式,每一位相同的为0,不同的为1。这样的话我们就可以把数转化为二进制存入字典树(二叉树,向左为0向右为1)中,异或的话就是把异或的数转成二进制的形式,把该位为1的翻转一下字典树节点的两个子节点就好了。查询的时候就是一直往左找,直到下面原创 2017-09-01 17:47:10 · 685 阅读 · 0 评论 -
HDU 6215 Brute Force Sorting(伪双向链表删边)
题目地址 题意:Beerus想把一个序列排序,但是他不会排序,他只会删除一些点(如果一个数比前一个数小或者比后一个字符大就要把这个字符删掉),为了让最后得到得串是有序的,或者是空字符串。问最后剩下的序列是什么? 思路:因为要与前一个后一个去比较,但是又要进行删除操作,那么很自然的就可以想到用双向链表去实现,但是双向链表要每次都要把空间给释放掉,要不然就会爆内存了,这样的话我们可以用结构体数组去代原创 2017-09-19 00:48:46 · 600 阅读 · 0 评论 -
Codeforces 845 G Shortest Path Problem?
题目地址 题意:给你一个图,求1~n的最短路(但是权重的计算方式变成了异或) 思路:如果没有环的存在的话那就是直接算下去,但是正是因为有环的存在,所以在一些地方可能绕环一周以后的值更小。所以要记录下来,最后判断最小的权重是多少。解释一下为什么要记录的是:add(nums^mapp[u[i].val^num[v]);吧。因为其实num[v]等于原来到v的距离,所以包括了之前的值,但是之前的值在记录原创 2017-08-24 00:33:48 · 325 阅读 · 0 评论 -
Codeforces 844 C Sorting by Subsequences(离散+dfs+排序)
题目地址 题意:给你一个序列,这个是序列是乱序的,你需要把它给排序,你有k个桶,每个数放入桶以后就会自动排序,然后再把这些数按原来的位置按现在的顺序放入,使得这个序列变得有序。问最大的k为多少? 思路:对这些数排个序因为要构成一个个的集合,所以每个集合必然是成环的,所以dfs一下就好了。然后每次dfs的时候下一步就是找该点排完序以后的位置上的数字是哪个,直到遇到被访问过的数。#include <原创 2017-08-28 00:21:09 · 593 阅读 · 0 评论 -
Codeforces 844 B Rectangles
题目地址 题意:有n*m的棋盘,同行或同列的相同颜色的棋子可以归为一个集合,问这个棋盘有多少个集合。(注意溢出) 思路:看代码比较好理解。我解释几个比较难理解的点:1、LL ans = -n*m;为什么要减去n*m? 因为单独的0或者1在遍历行和列的时候重复了。所以减去。2、ans += (1LL << cnt) - 1;为什么是2的cnt次方(cnt为该行或该列1或者0的数量)? 因为每个原创 2017-08-28 00:14:28 · 671 阅读 · 0 评论