思维
文章平均质量分 57
AC_0_summer
这个作者很懒,什么都没留下…
展开
-
CodeForces 11B--(YY题)
题意:从零点出发,第i步的步长为i,求走到x的最少的步数。分析:我一直以为这是道广搜题,原创 2015-05-19 18:30:18 · 907 阅读 · 0 评论 -
!HDU 4334 集合各出一数和为0是否存在-思维、卡时间-(指针的妙用)
题意:有5个集合,集合的大小是n,每一个集合出一个数,问能不能找到五个数的和为0。数据范围:T分析:暴力枚举是n^5*T,超时,那么就要用一些技巧了。这里有一个指针的妙用:如何在O(n)的复杂度找A,B,使得A+B==C(A,B分别属于一个数列a,b)。做法是先把a,b分别按升序排序,然后一个指针i指向a的首,指针j指向b的尾,判定指针指向的数的和是否==C,若等于则结束查找,若小于,原创 2015-08-01 23:31:04 · 808 阅读 · 0 评论 -
HDU 4312 最小切比雪夫距离-转化成曼哈顿距离再分治
题意:二维空间,n个点,求以某点为起点到各点的最小切比雪夫距离分析:上一道题之前已经用“分治“思想在O(n)的时间内求出了n个点,以某点为起点到各点的最小曼哈顿距离,那么我们根据二维空间切比雪夫距离和曼哈顿距离的关系,可以把切比雪夫距离转化成曼哈顿距离,再直接用之前的方法即可。二维空间:曼哈顿距离 :d=|x1-x2|+|y1-y2|,到某点的曼哈顿距离为r的点组成一个边长为√2*原创 2015-08-03 18:10:10 · 2553 阅读 · 0 评论 -
HDU 4343 多查询求区间内的最大不相交区间个数-思维&贪心-卡时间&二分&剪枝
题意:给你一些区间,现在有m个查询,求出每个查询的区间内的最大的不相交区间个数分析:几天前那道说谎问题时用dp的摞箱子模型求的最大的不相交区间个数,但是这题不能用这个方法,因为这题是动态的查询,不可能每个查询dp一次,超时。这题用贪心策略。求区间[l~r]里的最大不相交区间,贪心策略就应该先选该区间内右端点最小的,这样给以后待选的区间留下更大的空间,所以我们的做法就是先按照区间的右端点原创 2015-08-04 20:31:52 · 1433 阅读 · 2 评论 -
!HDU 4346 插旗子RGR的插法有多少种-思维&正难则逆&思维!
题意:只有R和G两种旗子,美丽的插法是存在两个R的中点插G的情况,现在给你一个字符串代表现在有些地方已经插了,求美丽的插法有多少种分析:美丽=总 — 不美丽所以我们来求不美丽有多少种。这里就是思维的问题了:一个不美丽的序列必须满足的条件是任何两个相邻R的距离为奇数并且所有的相邻R的距离相等。奇数这是显然的,如果两个相邻的R不为奇数,那么它们的中点存在,并且是G,这与不美丽矛盾;原创 2015-08-04 20:54:35 · 893 阅读 · 0 评论 -
HDU 4349 组合数的奇数个数-杨辉三角&Lucas定理
题意:给你一个n,求C (n,0),C (n,1),C (n,2)...C (n,n),奇数的个数。分析:Lucas定理:A、B是非负整数,p是质数。AB写成p进制:A=a[n]a[n-1]...a[0],B=b[n]b[n-1]...b[0]。则组合数C(A,B)与C(a[n],b[n])*C(a[n-1],b[n-1])*...*C(a[0],b[0]) modp同余原创 2015-08-04 21:31:54 · 1688 阅读 · 0 评论 -
HDU 4268 AliceBob大牌覆盖小牌-思维(贪心+multiset)
题意:Alice有n张牌,Bob有n张牌,A能覆盖B当且仅当A的长宽不小于B的长宽,现在输入他们的牌的长宽,求最多能覆盖多少张。分析:思维。先分别按长的降序排序,然后遍历A,每次都从B中选出长小于等于A的长的牌,把他们的宽放进multiset,然后利用lower_bound()函数找出A的宽能覆盖的最长的宽从multiset中删除。以此类推。这样做就保证了局部操作的最优性,这也是这题的贪心原创 2015-08-17 22:41:46 · 716 阅读 · 0 评论 -
HDU 4371 AliceBob之生成数列直到大于n或者小于等于S(i-2)-思维-(由已知条件推最优步骤)
题意:已知n、d1、d2....dm,Alice先生成一个数S1=0,Bob再生成一个数S2=S1+dk,之后他们生成的数遵循这样的条件:Si=S(i-1)+dk,或者Si=S(i-1)-dk,其中1分析:既然想不出什么直接搜索之类的方法,那么一定就是找规律了。这题我们来推一下他的条件得到每个人每一步的最利于自己的做法。考虑三个数:S(i-2),S(i-1),Si,假设当前步骤是生成S原创 2015-08-05 22:16:38 · 784 阅读 · 0 评论 -
HDU 5344 多个数的和异或-思维-(位运算)
题意:n个数的两两做和,然后异或分析:异或的性质:两个相同的数异或为0,所以Ai+Aj异或Aj+Ai等于0,所以最终结果就是Ai+Ai的异或代码:#includelong long t,n,m,z,l;long long a[1000005];int main(){ scanf("%I64d",&t); while(t--){ scanf("原创 2015-08-06 00:32:24 · 2894 阅读 · 0 评论 -
POJ 3104 Drying-二分答案
题意:有n件衣服需要晒干,每件有a[i]的水分,干燥有两种方式:1.自然风干,每分钟水分-1;2.用机器,每分钟只能用于一件衣服,且每件衣服水分-k。求弄干这n件衣服需要的最少的时间。分析:答案肯定在0~max(a[i])内,所以二分这个区间。然后检验在mid的时间内能否把n件衣服干燥,这个判断函数的核心是计算式:tot+=ceil(double(a[i]-mid)/double(k-1)原创 2015-09-11 09:49:16 · 650 阅读 · 0 评论 -
!HDU 4149 Magic Potion-yy-(二进制位运算技巧)
题意:已知九个数:x1 xor m,x2 xor m......x8 xor m,(x1+x2+....+x8) xor m;求出m分析:1.深入了解运用位运算:加法、异或的特性。异或的一些特性如:异或偶数次同样的数等于没做任何操作;若 a=b^c 则:b=a^c 、c=a^b2.熟练运用位运算符号:& 和 ^ 比如用 &1 从十进制的角度可以判断一个数是奇数还是偶数,从二进制位的原创 2015-07-20 22:56:11 · 1080 阅读 · 0 评论 -
HDU 4355 数轴上的点找使Si^3*Wi最小的和-浮点数三分
题意:一个数轴上有n个点,现在要找一个点到所有点的距离Si的立方乘以点的权Wi的和最小分析:三分。浮点数的二分或者三分可以直接用一个数字来限制查找的次数。TLE了几次,把查找次数从10000改到100就过了,本来以为数据范围比较大,100的精度不够。代码:#include#include#include#include#include#define eps 1e-8#def原创 2015-08-01 17:56:57 · 785 阅读 · 0 评论 -
!HDU 4311 最小曼哈顿距离-思维&卡时间-(横纵坐标分开算,排序)
题意:有n个点,求以这n个点中的某一点为起点,到各点的曼哈顿距离和最小是多少分析:暴力枚举又要超时,这种题一般都是考思维了,多半都是用技巧找到一个高效的方法。个人觉得这题跟上一篇文章的题是一个类型。这题也是用“分治”,虽说题目要求的是曼哈顿距离,但是我们为什么真的就要一步到位的求呢,可以横纵坐标分开求,先x排序,然后遍历一遍,求出横坐标的距离,然后y排序,遍历一遍求出坐标的距离加在刚才原创 2015-08-02 00:14:03 · 3693 阅读 · 0 评论 -
CodeForces 66D--思维(yy)
题意:求n个两两不互质,但是整体互质的整数,如果不存在输出-1.分析:yy题,找规律。整体互质只要满足其中三个互质就行了,用a,b,c这三个质数构造a*b,b*c,a*c这三个数,之后的n-3个数只要形如a*c*i这样的形式就行了代码:#includeusing namespace std;int main(){ int n; cin>>n; if(n==2) cout<<原创 2015-05-20 20:08:18 · 1159 阅读 · 0 评论 -
!HDU 4145--思维(yy题)--(细节)
题意:有两个中心点A,B,有其他n个点,每个点到中心点都有以它们的距离为半径的圆的辐射范围,求最小的辐射范围半径能覆盖所有的点。分析:这题纯靠想解题方法。一开始方向走错了一直WA。开始的想法:每输入一个点就计算它到A,B的距离,只取较小值,不断更新结果。WA的过程中才慢慢发现这样做会有很多特殊情况,但当时都没想过要换思路,只是不断地增加代码讨论情况,下次一定记得发现方法有很多不足就转换思路。正原创 2015-05-27 00:42:09 · 903 阅读 · 0 评论 -
codeforces 540B-贪心
题意:必须做完n个任务,每个任务的分值是1~p,现已做了k个,知道了分别得到的分数,求剩下的任务做完后能不能满足条件:总分不超过x,中位数不低于y分析:贪心。总分要尽可能小,并且要满足中位数的要求,所以就用y作为最小的中位数,固定中位数后,就在其前后补数让中位数真的满足条件,每次补1或者y。脑袋中要有补数的画面感代码:#include#includeusing namesp原创 2015-07-13 01:43:20 · 1174 阅读 · 0 评论 -
codeforces 534B Covered Path-思维
题意:有一段路,已知起点和终点的速度、总时间和每秒之间速度差值的上限,求这段路最长能是多少分析:思维代码:#include#includeusing namespace std;int main(){ int s,e,t,d; int a[200]; while(cin>>s>>e){ cin>>t>>d; memset(a,0,sizeof(a)); a[1原创 2015-07-12 22:10:54 · 820 阅读 · 0 评论 -
!codeforces 538B-Quasi Binary-(思维)
题意:由01两个数字组成的十进制数,加起来等于n,求最少有多少个这样的数字分析:灵活创新,思维转换;如:415=111+101+101+101+1,不用想什么十进制减法什么的代码:#includeusing namespace std;int main(){ char a[10]; int i=0,hight=0; while(cin>>a[i]) i++; for(in原创 2015-07-11 22:34:50 · 1062 阅读 · 0 评论 -
codeforces 535B-Tavas and SaDDas
题意:设只由4或者7组成的数字为幸运数字,输入n,求n在所有的幸运数字中排第几分析:预处理出所有的幸运数字,排序,然后输出n对应的位置即可。处理方法是初始a[0]=4,a[1]=7,然后用这两个数前面分别加4和7的方法来生成两位数,再用十位数生成三位数,即:4—>44和74,7—>47和77;因为n上限是10^9,所以要生成9位数,外层循环才8,内层循环也不大,不会超时,注意这里最好不要用po原创 2015-07-12 00:14:15 · 1828 阅读 · 0 评论 -
HDU 4243 排列循环节问题-思维-(排列组合)
题意:1~n的排列,求满足下述循环节里k最大的排列有多少种。分析:题目不难,其实排列组合的问题不就是用高中的知识嘛。这题的关键是对这个循环节的理解,画个图就容易理解多了:1—>1;1—>k—>1;1—>x—>k—>1......循环节中必须保证k最大,所以循环节中除了1和k的其他元素肯定是在1~k中选择,那么枚举其他元素的个数,然后在1~k中选择,然后排列,其余的元素再全排列即可。特殊情况原创 2015-07-29 14:41:44 · 1103 阅读 · 0 评论 -
codeforces 399B Red and Blue Balls-数据-(模拟题找规律)
题意:按照题目的步骤把所有的球都换成红色分析:直接模拟超时。模拟题要是超时就是找规律。自己手动模拟一下发现每换一个Blue的球a[i]需要换:a[0]+a[1]+....+a[i-1]+1次,所以这就是一个数列的题。先预处理所有的a[i]需要的次数:b[i],然后根据输入用预处理的数列求和即可。代码:#includeusing namespace std;int n;char a原创 2015-07-20 00:29:11 · 670 阅读 · 0 评论 -
!HDU 5317 求区间里两个数的质因数个数的gcd的最大值-预处理
题意:设一个数i的质因数个数为F(i),现给你一个区间[l~r],求max(F[i],F[j]) 数据范围:10^6分析:预处理出所有的F[i],O(nlgn),10^6不会超时;然后查询用O(7),查询不能用O(n),因为有多个查询会超时。区间问题减少查询时间复杂度多半类似一个区间的和用两个前缀和相减的方式,前缀和可以在预处理的时候计算,然后区间查询是用两个前缀和相减就行了。如su原创 2015-07-30 23:19:59 · 1262 阅读 · 0 评论 -
Light OJ 1088 Points in Segments-二分(水)
题意:有p个点,q条线段(x,y),求每条线段上各有多少个点。输入的点按照升序输入且不重复。分析:裸的二分查找。对于每条线段找到>=x的最小值的位置和代码:#include#include#includeusing namespace std;int t,p,q;int a[100005];int f(int x,int y){ int l=0; int r=p-1;原创 2015-09-15 17:57:50 · 619 阅读 · 0 评论