自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Fighting

做一只勤劳的小蜜蜂,幸福才能揽入怀中。

  • 博客(402)
  • 收藏
  • 关注

原创 Codeforces 887D - Ratings and Reality Shows

题意:大意是说模特有个rating值,在第0天值为start,之后第ti天会去参加摄影或者时尚展,摄影会使rating涨a,时尚展会下降b,现在有个模特想要在某天去参加脱口秀,在之后的len天中参加摄影会使rating涨c,时尚展会下降d。该模特想要她的rating在她参加脱口秀之前及参加之后的len天始终非负数,问她应该在哪天参加脱口秀。思路:判断该模特参加脱口秀之前rating非负计算她原来每次参加摄影或者时尚展以后的rating值即可,可通过计算前缀和判断,设为sum1。同理参加脱口秀之后le

2018-01-07 22:43:50 373

原创 HDU:3333 Turing Tree (树状数组+离线处理+哈希+贪心)

题意:给一个数组,每次查询输出区间内不重复数字的和。思路:用前缀和的思想可以轻易求得区间的和,但是对于重复数字这点很难处理。在线很难下手,考虑离线处理。将所有查询区间从右端点由小到大排序,遍历数组中的每个数字,每次将该数字上次出现位置的值在树状数组中改为0,再记录当前位置,在树状数组中修改为当前的数值。这样可以保证在接下来的查询中该数字只出现了一次。这是贪心的思想,只保留最可能被以后区

2015-05-06 22:28:41 708

原创 POJ:2127 Greatest Common Increasing Subsequence(动态规划)

题意:求最长公共上升子序列。思路:此题比较容易想到一个O(n^4)的算法。具体方法是首先用两个嵌套的循环遍历数组a和数组b,当a[i]==b[j]时,寻找在数组a[1……i-1],b[1……j-1]之间,满足a[i']==b[j']且a[i']试着优化这个算法,在状态转移的时候我们要寻找一个的状态是,数值上小于当前的数组元素,而且dp[][]要最大。在上述算法中,状态转移时枚举i‘

2015-05-06 21:58:40 686

原创 常见的Linux命令与shell语句整理

输出文件file的第10行内容。sed -n '10p' file输出文件file的第5行,第7行,第10行内容。sed -n '5p;7p;10p;' file输出文件file的第4到8行内容。sed -n '4,8p' file从file.txt文件里提取(xxx) xxx-xxxx or xxx-xxx-xxxx. (x means a digit

2015-04-27 18:55:59 4013

原创 SDUT:2879 Colorful Cupcakes(DP计数)

题意:给3种颜色的珠子围成一个环,要求相邻两个珠子的颜色不同,问一共有多少种情况。思路:背包计数问题。可先将环看作一个链,dp[i][j][k][l],i表示以第i种颜色为尾,j、k、l分别表示三种颜色的珠子有多少个。如果是链的话很容易建立状态转移方程。环的话要考虑首尾位置,实际上就是对于答案dp[0][v0][v1][v2]这种,要减掉所有以第0种颜色开头的情况,所以只需要将dp[0][1]

2015-04-27 11:35:21 571

原创 SDUT:2883 Hearthstone II(第二类Stirling数)

题意:将m个物品放入n个箱子之中,要求每个物体至少使用一次。问有多少种情况。思路:第二类斯特灵数。第二类Stirling数 S(p,k)   S(p,k)的一个组合学解释是:将p个物体划分成k个非空的不可辨别的(可以理解为盒子没有编号)集合的方法数。k!S(p,k)是把p个人分进k间有差别(如:被标有房号)的房间(无空房)的方法数。   S(p,k)的递推公式是:S(p

2015-04-23 20:03:17 540

原创 SDUT:2157 Greatest Number(中途相遇法)

题意:一些数,选4个(可重复),输出最接近给定数字的和。思路:经典题目,使用中途相遇法可做。先枚举两个数字,求和存入并排序。再枚举两个数字,根据缺少部分,二分之前的和,取最大值。STL是神器,要学会使用。#include #include #include #include #include #include using namespace std;typedef lon

2015-04-23 16:09:46 529

原创 CodeForces 501D – Misha and Permutations Summation(康托/逆康托展开+树状数组+二分)

题意:给两个排列,分别算出是第几小的排列,这两个数字求和以后再模n!得到一个数,输出这个数对应的排列。思路:很明显的康托/逆康托展开。难点在于如何快速求解康托/逆康托以及模n!上。在康托展开中,遍历每一位是在所难免的,时间复杂度是O(n),在统计比a[i]小的数字个数的时候显然不能遍历了,可以用树状数组加速,时间复杂度是O(lgn)。这里并不得到的数字加起来,因为可能达到n!,太大了,而是

2015-04-22 12:41:37 723

原创 ZOJ:3802 Easy 2048 Again (状态压缩)

题意:1维的2048。思路:很好的一道DP。可以观察如4、16、8这样的组合,其中的4就永远都不会被合并,因为以后的结果只能是越来越大。所以可以被合并的数列特征是递减序的,如32、16、4。这样我们可以以当前组合中的末尾递减序列为状态进行DP。这里的状态大小不是非常明显,仔细想想极限情况,有500个16,每2个16形成32,每2个32形成64…如此合并,至多就是16*500的状态,因此开8

2015-04-22 12:00:48 594

原创 HDU:4893 Wow! Such Sequence!(线段树单点更新+区间求和)

题意:执行相应的4种操作。思路:单点更新时求最近fib,维护fib的和及元素的和。注意初始化的时候要对每个0求fib。#include#include#include#include#include#include#include#include#define LL long long#define MAXN 100001<<2using namespace std;

2015-04-21 10:11:08 523

原创 SDUT:2408 Pick apples(贪心+完全背包)

题意:给一个大小为v的包,有三种苹果,分别给其价值和体积,问最多可装多少价值。思路:v高达10^8,直接完全背包是不行的。由于一共三种苹果,可以考虑优化。在苹果体积是三种苹果体积的乘积时,取可以得最大价值的那种苹果。这样优化以后v大小变成10^6,这样就用完全背包就行了。#include #include #include #include #include #include

2015-04-18 17:07:53 634

原创 HDU:4255 A Famous Grid(构造+BFS)

题意:给一个表,问两个位置之间的最短距离是多少,其中素数位置不能经过。思路:坐标范围是10000,也就是说这个表大约是100*100,当然题目中表是无穷大的,由于有些位置不能走实际上可能会大于100*100。这样构造一个大点的表判断一下素数位置,每次查询直接bfs求最短路即可。#include #include #include #include #include #includ

2015-04-18 14:31:44 960

原创 HDU:4252 A Famous City(单调栈)

题意:给一些从正面看得到的楼的高度,问最少可能有多少楼。思路:单调栈。用一个栈维护一个单调递增序列。如果栈空或栈顶小于当前元素可将当前元素压栈,如果小于栈顶元素则将栈顶元素弹出并将答案加一,相同则无视。注意存在0的情况,即如果楼的高度是0不需要将该数字压栈。#include #include #include #include #include #include #includ

2015-04-18 14:24:11 568

原创 HDU:4251 The Famous ICPC Team Again(划分树)

题意:给一组数字,多次查询求中位数。思路:划分树。#include #include #include #include #include #include #include using namespace std;const int maxn=100005;struct DivideTree{ int sorted[maxn],dat[20][maxn];

2015-04-18 14:18:22 497

原创 HDU:4249 A Famous Equation(数位DP)

题意:给一个表达式形如a+b=c,其中一些数字为?,问使表达式成立有多少种情况。思路:不太容易发现是一道数位DP。比较容易建立状态转移方程,dp[i][j][k][l]表示j(0表示不进位,1表示进位)使a的第i位为k,b的第i位为l的情况个数,这样可以计算得c的第i位。用线性时间枚举位数,10^2枚举过去状态,10^2枚举现在状态建立转移即可。最后累加求和。注意前导零的问题。给一组数据??+

2015-04-18 14:14:55 612

原创 POJ:1741 Tree(男人八题-树分治)

题意:给一棵树,问两个结点之间的距离小于等于K的有多少对。思路:男人八题之一。使用树分治解决。简单来说,对于一棵树的。那么答案分为三种情况,1,两个结点在该根结点的子树上,此情况递归解决;2,两个结点在根的两个子树上,对于这种情况,我们可以找出所有结点到该根节点的距离,这个过程是O(n),对距离排序(O(nlogn))以后,可以O(n)求出小于等于K的对数,但注意这种方法和情况1中有重复,要删

2015-04-15 22:03:44 651

原创 SDUT:2411 Pixel density

题意:给一句话,有屏幕尺寸和英寸,再输出一句话输出结果。思路:数值好算,关键在于字符串处理。其实也不难,要好好利用库函数。注意0的特殊情况。#include using namespace std;char word[30][30];double yc;int wp,hp;int main(){ int T,kase=0; scanf("%d",&T);

2015-04-13 08:04:15 506

原创 SDUT:2412 Fruit Ninja I(动态规划)

题意:一个切水果游戏。每秒出现一些水果,它们都在一条线上,有好水果和坏水果,好的可以加分,坏的减分,每次连续切好水果三个以上可以分数加倍。每秒只能切一次,每切一次要间隔m秒。问最多得多少分。思路:对于每一秒的时候,可以确定连续的好水果一定会一起切,可以合并。然后用最大连续数组和求解该秒可得最优解。然后再所有的时间内进行简单动规就行了。#include using namespace

2015-04-13 08:00:04 706

原创 SDUT:1143 Mine Number(二进制枚举)

题意:给一幅图说明周围的地雷数,要你输出地雷图,确保答案唯一。思路:枚举第一行的地雷,然后往下递推判断得到的地雷图是否符合原图要求。#include #include #include #include #include #include #include using namespace std; int n,m; char num_mat

2015-04-13 07:52:03 527

原创 UPC:2226 Contest Print Server(模拟)

题意:模拟。思路:注意比较坑的地方。如果Team1请求打印,而此时计数达到s,那应该先输出一个Team1 request 0 pages。#include #include #include #include using namespace std;int main(){ int T; scanf("%d",&T); while(T--) {

2015-04-07 21:59:33 658

原创 UPC:2225 The number of steps(概率DP)

题意:按题目要求问走出迷宫的期望。思路:比较明显的概率DP。#include #include #include #include using namespace std;double f[50][50];bool vis[50][50];int n;double a,b,c,d,e;double dp(int i,int j){ if(vis[i][j]) r

2015-04-07 21:57:23 482

原创 UPC:2224 Boring Counting(二分+划分树)

题意:给一串数字,每次查询区间内大于等于A小于等于B的数字个数。思路:二分+划分树。划分树可以求区间内第k小的数字,配合二分可以求到某个数字在区间内是第几小数字。#include #include #include #include #include using namespace std;const int maxn=50005;typedef long long LL;

2015-04-07 21:52:29 549

原创 UPC:2219 A^X mod P(预处理空间换时间)

题意:按公式求f[x],再按公式求结果。思路:直接搞的话f[i]可能高达10^9,n为10^6,即使用快速幂也会超时。用空间换时间是一种常见的降低复杂度的办法。对于任意一个数字X,它可以变成X=a*N+b(N为常数)。基于这个思路可以把f[n]=a*N+b,如果取N=10^5,那么可以保证a最大为10^4,b最大为10^5。这样A^f[n]=A^(a*N+b)=A^(a*N)*A^b=(A^N

2015-04-06 22:27:00 456

原创 UPC:2218 Thrall’s Dream(BFS)

题意:给一个有向图,问任意两点之间能否联通。思路:由于数据量不大,可以枚举每个点直接bfs遍历整个图,但这个过程有很多重复,可以加一些优化。比如说在当前枚举点x,它可达点y。如果y点之前已经枚举过那么就不需要再遍历y了,直接将y可达的点设为x也可达就行了。#include #include #include #include #include #include using na

2015-04-06 22:25:23 527

原创 ZOJ:2672 Fibonacci Subsequence(动态规划+hash)

题意:在给定的数组里,寻找一个最长的序列,满足ai-2+ai-1=ai。并输出这个序列。思路:很容易想到一个DP方程dp[i][j]=max(dp[k][i])+1. (a[k]+a[i]==a[j],1dp[i][j]表示序列最后两位是a[i],a[j]时的最长长度。这个方程状态是O(n^2),转移是O(n),总复杂度是O(n^3)会超时。进一步思考会

2015-04-06 22:15:27 1864

原创 POJ:3670 Eating Together(动态规划)

题意:每次可以改变一个数字,要求使给定的数列变成单调递增或递减,求最小操作数思路:简单动规。设dp[i][j]表示以第i个数为最后一个数且数值为j时候的最优解,就递增时而言,dp[i][1]可以从dp[i-1][1]转移,dp[i][2]可以从dp[i-1][1]、dp[i-1][2]转移,dp[i][3]可以从dp[i-1][1]、dp[i-1][2]、dp[i-1][3]转移,当然还要考虑

2015-04-03 23:01:19 1013

原创 ZOJ:3641 Information Sharing(并查集)

题意:不说了。。思路:很明显的并查集。数据量比较小,集合可以用set维护。唯一一个值得注意的地方是可能会爆内存,因此每次合并以后原来的set要清空。#include #include #include #include #include #include #include #include using namespace std;typedef long long LL;

2015-03-31 22:07:55 436

原创 ZOJ:3634 Bounty hunter(二分+树状数组)

题意:大概就是说有一些票,编号代表只能坐从左往右第i个空座。每个人按序买了票,问最后他们都做哪个座位。思路:比较经典的模型,类似于约瑟夫环。首先将树状数组所有数字置1,每次二分前缀和得到第k个位置,该票被买走意味着将该位置数字置0。如此可以。#include #include #include #include #include #include #include using

2015-03-31 22:04:19 1158

原创 ZOJ:3633 Alice's present(离线处理)

题意:给一串数字,每次区间查询,输出从右往左第一个重复的数字,如果没有重复数字则输出"OK"。思路:据说此题暴力也能过,但应该不是正解。我的思路是用离线处理,先把所有查询读入,并保存为区间,根据区间右端点存进相应的vector数组中(区间右端点作为数组索引)。这样从右往左遍历所有的数字,并用一个queue(队列)来保存所有经过的查询区间。这样,一旦经过某个结点就将以该位置为右端点的查询区间存入

2015-03-31 21:52:28 460

原创 HDU:1024 Max Sum Plus Plus(动态规划)

题意:求最大m子段和思路:DP。状态转移方程:dp[i][j]=max(dp[i][j-1],max{dp[i-1][k],i-1dp[i][j]表示第i组以第j个数字为最后一个元素时的最大值,决策分为a[j]加到第i组第j-1个元素后和加到第i-1组第k个元素自己独立成组两种情况。#include #include #include #include using na

2015-03-25 11:10:53 416

原创 UVa:11925 Generating Permutations

题意:由一个排列,给两种操作(1,交换头两个数字;2,将第一个数字放到最后)。问从由一个升序原始序列1,2,3...n变成给定排列的操作序列是什么?思路:注意题意,不要搞错了,是从123...变成给定排列,而不是给的排列变成123..这样。显然从给定的变成有序状态比较好做,所以可以逆向思考。操作1不变,操作2等价于将尾部数字放到头部,这样最后只需要逆序输出操作序列即可。具体做法用操作1每次维护

2015-03-15 12:00:25 1423

原创 POJ:2796 Feel Good(单调栈)

题意:给一个数组,计算某段区间的和乘以该区间最小值,要求该值最大并输出区间范围。思路:用一个单调栈,计算以某数为区间的最小值的区间左右范围。具体来说,如果栈顶为空则left[i]=1;如果非空,比较a[i]与栈顶元素的大小,如果a[i]小于栈顶则right[sk.top()]=i+1(我的区间表示是左闭右开)并弹出,如果相等则left[i]=left[sk.top()],如果大于则left[i

2015-03-11 17:28:46 465

原创 九度OJ 1503:二叉搜索树与双向链表

#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long LL;const int INF=0x7f7f7f7f;const int inf=0x80808080;struct TreeNode

2015-03-03 17:54:07 538

原创 C++ const用法详解

const可以用来定义常量。常量将不能被修改。以下

2014-09-28 12:29:18 720

原创 UPC:2526 Color the necklace

http://acm.upc.edu.cn/problem.php?id=2526 这个题是http://blog.csdn.net/kkkwjx/article/details/21525325的加强版,也是Polya定理非常经典的题目。由于最后要除以2和4,在模运算里面直接除是不行的,要乘上2或4模MOD的乘法逆元。用到了Polya定理,求欧拉函数,求逆元,快速幂模#inc

2014-03-26 12:02:35 747

原创 UPC:2536 Changlong(二进制技巧)

http://acm.upc.edu.cn/problem.php?id=2536给你一个数组,有一个数出现q次,其余数字出现p次。现在要找出这个出现一次的数来。内存卡的很紧,只要1MB。开一个数表示二进制的每一位,10^7开个25的数组足够。把每个数用二进制数表示,每位有数字则该数组位置+1。由于有个数字不是出现了p次,所以该数字的每一位都不能被p整除。这样可以计算出这个数字来。

2014-03-25 21:24:15 686

原创 UPC:2543 Job!Job!Job!(贪心+优先队列)

http://acm.upc.edu.cn/problem.php?id=2543贪心+优先队列。之前做过这类在时间轴上解决带权值的区间问题,一直都是用贪心+优先队列的方法。比赛的时候看了一下觉得没思路就没多想。后来看题解发现是贪心+优先队列,就立刻想到了方法。需要总结和反思。枚举每个时刻从m到1,将该时刻要截至的任务放进优先队列每次弹出当前权值最大的任务并完成。注意如果某任务

2014-03-25 14:17:31 667

原创 UPC:2541 HaHa's Morning

http://acm.upc.edu.cn/problem.php?id=2541题意:拓扑序列计数。思路:集合上的DP。floyd算法求传递闭包gl【i】【j】,可以快速判断i是否为j的前驱。dp【S】=sum{dp【S^i】}i的要求,它的前驱全部出现在S中。对于一些状态,某结点的前驱没有出现在集合中,这样的dp【S】=0 思路很巧。如果是从前往后想的话,需要每次找入度为0的点。动规是从顶往下,这样的话考虑不符合的情况就行了。

2014-03-24 21:54:53 872

转载 2014年计算机求职总结--准备篇

版权所有,转载请注明出处,谢谢!http://blog.csdn.net/walkinginthewind/article/details/13000431找工作是一个长期准备的过程,突击是没什么效果的。准备时间越长,准备就越充分,就越容易拿到好的offer。我基本上从研究生一入学就一直在准备找工作的东西,看书、研究研究笔试面试题、在线编程训练、参加实习招聘等等。当然,其实主要还是研二

2014-03-22 20:32:49 541

原创 UVa:1508 Equipment

K大于等于5的时候很好想,只要每一项都取最大值相加即可。但是小于5的时候就不太好做了。我一开始想了一个思路,认为选的K个type在这5种r中每个一定有一种是最大的。但是6 12 2 2 2 23 2 2 1 12 3 2 1 12 2 3 1 11 1 2 3 21 1 2 2 3这组数据就过不了,正确答案应该是10。好在数据量并不大,可以无脑枚举。

2014-03-22 20:04:58 946

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除