摘要:数学公式 log(10) n! = log 1 + log 2 + …… + log n 就能求出位数了,取下限表示第一次用JAVA,勿喷~ 1 import java.util.Scanner; 2 3 4 public class Main { 5 public static voi...
阅读全文
摘要:第一次做二维DP,1A思路是状态压缩+枚举,压缩的方法是将第p至第q行的元素加和,然后求最大子序列和,就能得出这一情况下的最大子矩阵然后用两层循环按行去枚举矩形,就能得出结果了。求最大子序列和的时候要注意,子序列和并非一定>=0上代码 1 #include 2 #include 3 #include 4 using namespace std; 5 6 #include 7 #include 8 9 #define range 11010 int a[range][range];11 int b[range];12 13 int main()14 {15 int n;16 ...
阅读全文
摘要:水题,我直接暴力查询的,稍微有点优化就好了。 1 #include 2 #include 3 using namespace std; 4 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 #include13 #include14 #include15 16 #define repA(p,q,i) for( int (i)=(p); (i)!=(q); ++(i) )17 #define repAE(p,q,i) for( int (i)=(p); (i)=(q); --(i) ...
阅读全文
摘要:并查集倒过来用就好了,水题。但是题目貌似有多组数据,可又没有说明,导致我wa了两次。 1 #include 2 #include 3 using namespace std; 4 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 #include13 #include14 #include15 16 #define repA(p,q,i) for( int (i)=(p); (i)!=(q); ++(i) )17 #define repAE(p,q,i) for( int (i)=...
阅读全文
摘要:首先要吐槽一下杭电,错误的代码都能过,而且这种情况不止一次了。第一次最大流,纪念一下。就是用的Edmonds-Karp,自己的模板,详细资料参考《算法导论》第26章最大流。题意就是给N条有向路径,M个节点,1为源点,M为汇点,求最大流裸题。直接上代码,代码中,最开始,我初始化和搜索中的范围都是[1,N],在HDU交,居然AC。后来在POJ WA地不明所以,才发现这个错误。注意判重边。 1 #include 2 #include 3 using namespace std; 4 #include 5 #include 6 #include 7 #include 8 #includ...
阅读全文
摘要:枚举题。最多只有10个vacant,所以把(1 2 #include 3 using namespace std; 4 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #define repA(p,q,i) for(int (i)=(p); (i)!=(q); ++(i) ) 13 #define repD(p,q,i) for(int (i)=(p); (i)!=(q); --(i) ) 14 #define repAE(p,q,i) for(int (...
阅读全文
摘要:第37届ACM/ICPC杭州现场赛C题DP经典。思路: 1 #include 2 #include 3 using namespace std; 4 5 #include 6 #include 7 8 #define repA(p,q,i) for(int (i)=(p); (i)!=(q); ++(i) ) 9 #define repD(p,q,i) for(int (i)=(p); (i)!=(q); --(i) )10 #define repAE(p,q,i) for(int (i)=(p); (i)=(q); --(i) )12 #define range 100001013...
阅读全文
摘要:大水题,好欢乐,需要注意的就是字符的读入,不要出错。 1 #include 2 #include 3 using namespace std; 4 5 #include 6 #include 7 #include 8 #include 9 #include10 #define repA(p,q,i) for(int (i)=(p); (i)!=(q); ++(i) )11 #define repD(p,q,i) for(int (i)=(p); (i)!=(q); --(i) )12 #define repAE(p,q,i) for(int (i)=(p); (i)=(q); --(i...
阅读全文
摘要:题意是求,在一个联通图中,求所以点对之间的最短路,并求出这些最短路中最长的是多少。用Floyd-Warshall是O(n^3),会超时的。用于稀疏图的Johnson算法我不会,所以不知到行不行。所以只有用N次BFS求最短路。图用邻接表储存,BFS的时候注意标记,以便能跳出循环。这样的时间复杂度就会远远低于n^3了。下面是代码: 1 #include 2 #include 3 using namespace std; 4 5 #include 6 #include 7 #include 8 #include 9 #include 10 #define repA(p,q,i) ...
阅读全文
摘要:几乎是裸的最小生成树,只是Nick 和 Apple 要直接相连。上代码: 1 #include 2 #include 3 using namespace std; 4 5 #include 6 #include 7 8 #define repA(p,q,i) for(int (i)=(p); (i)!=(q); ++(i) ) 9 #define repD(p,q,i) for(int (i)=(p); (i)!=(q); --(i) )10 #define repAE(p,q,i) for(int (i)=(p); (i)=(q); --(i) )12 #define range ...
阅读全文
摘要:第一次用hash,第一次用二维树状数组,这道题所涉及到的知识点对我来说几乎是全新的。于是乎这道题花去了我一晚上加一上午搞。一开始直接开10001*10001的数组,维护N棵树状数组,结果显然爆内存了。不过现场赛的时候据说这样就能过,泥玛坑啊!~后来搜题解,才知道。好吧,用过一维树状数组的童鞋学二维应该马上就能上手的,这里贴一个二维树状数组的资料。二维树状数组资料:http://www.java3z.com/cwbwebhome/article/article1/1369.html?id=4804至于hash这里用到的都是简单映射,看完hash的百度词条就能做这题了。其实这道题的关键是在于坐标转
阅读全文
摘要:一维DP。给定买电脑的费用c,给定使用年限n。题意就是给定m(j>=i),表示第i年买的电脑,直到第j年需要的维护费用。那么就是一个一维DP了,从代码里可以直接看出解题思路的,所以不解释了。 1 #include 2 #include 3 using namespace std; 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 13 #define repA(p,q,i) for( int (i)=(p); (i)!=(q); ++(i) )14 #defi
阅读全文
摘要:如题所示,考察的是双端队列。题目很变态,题意要自己猜。就是code为2的时候输出p最大的对应的k,code为3时输入p最小的对应的k。查询的时候同时删除所查询的元素。所以可以以为键值,建立map client,map会自动以p为基准进行升序排序。用不来STL的童鞋自己去敲数组吧。 1 #include 2 #include 3 using namespace std; 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 13 #define repA(p,q,i) .
阅读全文
摘要:Nimm博弈的延伸。转自:http://www.cppblog.com/klion/archive/2010/08/27/124932.html学了三种简单博弈(前一篇)之后,我又在这篇博文这学了HDU1907的解法下面说下我的理解,有些借鉴原博文。这题和下面的题有点相似,但是又不一样也就是说把最后取完的定为输家改成,最后取完的定为赢家。后面的这个要简单一点,下面是简单分析,先来看这个简单的首先我们用T表示当前状态的所有火柴数异或为0,否则极为S。1.S可以转化成T我们设一共有n堆火柴,每堆有k(i)根.那么S态中k(1)^k(2)^……^k(n) != 0,这个值我们记为c那么肯定有某个k(
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4720Naive and Silly MugglesTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 272Accepted Submission(s): 192Problem DescriptionThree wizards are doing a experiment. To avoid from bothering, a special magi
阅读全文
摘要:大水题。题目链接:http://code.hdu.edu.cn/showproblem.php?pid=4727如果第一个士兵报数小于1,那就是第一个士兵。否则往后判断,如果nun[i-1]-num[i] != 1,那就是i。如果都正确,那肯定就是第一个兵报错了。上代码: 1 #include 2 #define repA(p,q,i) for( int (i)=(p); (i)!=(q); ++(i) ) 3 #define repAE(p,q,i) for( int (i)=(p); (i)=(q); --(i) ) 6 #define range 100010 7 8 int a[...
阅读全文
摘要:这道题可能会卡在精度上。题目链接:http://code.hdu.edu.cn/showproblem.php?pid=4709题意就是给你N个点,求能组成的最小三角形面积。数据量比较小,可以用枚举,但是求面积之前要注意判断是否三点共线。上代码: 1 #include 2 #include 3 using namespace std; 4 #include 5 #include 6 #include 7 #include 8 9 #define repA(p,q,i) for( int (i)=(p); (i)!=(q); ++(i) )10 #define repAE(p,q,i) f...
阅读全文
摘要:这个题目是一个巧用并查集的经典题目。题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4707 PetTime Limit: 4000/2000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 652Accepted Submission(s): 334Problem DescriptionOne day, Lin Ji wake up in the morning and found that his pethamster...
阅读全文
摘要:这道题就是一个打表题。题目链接:http://code.hdu.edu.cn/showproblem.php?pid=4715把range范围内的素数打一个表,再有一个判断一个数是否为素数的表。因为 n>2 ,所以要求的两个数肯定是一个大于n一个小于n。在素数表寻找第一个比n大的数,设为B,判断B-n是否为素数,是的话就输出,否则继续循环。上代码: 1 #include 2 #include 3 using namespace std; 4 #include 5 #include 6 #include 7 #include 8 9 #define repA(p,q,i) for( int
阅读全文
摘要:新学的知识点,三分,参考资料:http://wenku.baidu.com/view/4a5aac8884868762caaed521.html题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4717讲一下题目的思路。总得来说这道题就是模拟加三分,利用的是三分的一个特点(上面的参考资料有详细讲)。即搜索的有向性,可以根据实际情况来选择搜索方向。而这道题里面,T时间里最大两点距离的变化应该是,从小到大再到小,正好是三分的特点。但是算法的正确性却无从证明。所以,想思路,有时候靠的是直觉吧。以0,T(T=10000000)为时间搜索区间,计算mid1 (
阅读全文