
hdu
文章平均质量分 60
primo_001
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
hdu4119-Isabella's Message
这个题是我水出来的,水了一天才水出来的,代码有点乱。思路:1,读矩阵,2,从不同方向四种翻转,每种翻转翻三个90°3,读入m个单词4,找出不合要求的情况做好标记5,输出字典序最小的 明文 代码如下:(由于变量很多,命名命的我头都大了,所以有点乱)#include #include #include #include using namespace std原创 2012-08-21 13:43:51 · 955 阅读 · 0 评论 -
hdu 4762 - Cut the Cake(大数)
思路十分简单,就是计算一下 n / ((m)^(n-1));代码如下:int cnt, ans[100];int gcd(int a, int b){ return b==0?a:gcd(b,a%b);}void cal(int x){ for(int i = 0; i < cnt; ++i) ans[i] *= x; int t =原创 2013-09-29 23:47:53 · 722 阅读 · 0 评论 -
hdu 4745 - Two Rabbits(动规)
比赛的时候一直磕到lcs上,怎么优化都不能过掉这道题目,,,,气死个人,,,听了人家的找区间回文串的思路,才恍然大悟啊。。。状态:dp[i][j]表示i,,,j组成的子串中的最长回文串的长度状态转移:dp[i][j] = max{dp[i+1][j], dp[i][j-1], dp[i+1][j-1]+2*(s[i]==s[j])};代码如下:#include #in原创 2013-09-15 23:00:17 · 727 阅读 · 0 评论 -
hdu 3650 - Hot Expo(贪心)
思路: 把表演的时间段想象为直线轴上的线段,统计各点的重复次数,最大值即为答案。 由于各个线段的有效信息(可能存在最大值)均在端点上。所以线性扫描的时候只扫描端点即可。代码如下:const int M = 105;struct Node{ int x, type; bool operator < (const Node &tmp) const原创 2013-10-09 23:18:25 · 810 阅读 · 0 评论 -
hdu 4759 - Poker Shuffle(巧妙二进制)
题意: 从初始状态开始(1,2,3,4,5,6,7.....n),每个节点往下都有两个状态一种是(1,3,5,7,...2,4,6,8....)另一种是(2.4.6.8....1,3,5,7....); 那么这到题目的可以看作一个状态二叉树,在树上,假如到第x层有解,那么此时节点的状态肯定是:A位置是X,B位置是Y。 即xx = A;yy = B;(xx表示X的所在位置, 同理,原创 2013-09-29 22:25:04 · 1305 阅读 · 2 评论 -
hdu 3641 - Treasure Hunting(筛素数+二分)
题意:求最小的x!使得x!>= a1^b1*a2^b2*a3^b3.......;思路:a总是在100以内的,所以分解质因数,保存其各个质因数的个数即可保存下来这个very big的大数;然后二分x,求解最小的x即可。代码如下:typedef long long LL;typedef unsigned long long LLU;const int M = 105;原创 2013-10-10 22:16:55 · 858 阅读 · 0 评论 -
hdu 4101 - Ali and Baba(搜索)
看起来想博弈的题目,说白了,就是一道搜索的题目。思路:先从里往外搜,把宝藏的保护壳标记出来,如果保护壳是开口的,那么Ali第一次就能赢得比赛, 如果是闭口的,那么第一次打开保护壳的人输,因此,我们再次从外围向里搜索,把那些保护壳外的都统计出来,正好在壳上的,就统计x-1,开始的时候用的两遍dfs,果断的爆栈,然后换了bfs才过的,还要注意存数据的数组要初始化的,,,代码如下原创 2013-09-24 23:59:22 · 859 阅读 · 0 评论 -
hdu 4565 - So Easy!(矩阵快速幂)
典型的矩阵快速幂:http://blog.youkuaiyun.com/coraline_m/article/details/9977405代码如下:#include #include #include #include #include #include #include #include #include #include #include #include #def原创 2013-09-27 21:17:00 · 506 阅读 · 0 评论 -
hdu 4768 - Flyer(二分)
思路:由 there is at most one student who is unlucky 可知,如果答案存在的话,那么所有人手中的传单之和肯定是个奇数,否则的话必定是偶数。根据这一特征进行二分,如果左半部分是奇数的话,那么答案肯定在左半部分,否则的话,在右半部分,最后最二分的答案检查一下即可。代码入下:int n, a[M], b[M], c[M];原创 2013-09-28 20:06:27 · 573 阅读 · 0 评论 -
hdu 1907 - John(简单博弈)
博弈专题开始了,这里分享一个大神的专题:http://blog.youkuaiyun.com/acm_cxlove/article/details/7854526这个题目来自:http://blog.youkuaiyun.com/acm_cxlove/article/details/7854530把同一颜色的糖果看作一对物品,我们一次只能从一个堆上取任意个(不少于1个)糖果,取最后一个糖果的人是输家。这是原创 2013-10-28 15:08:22 · 829 阅读 · 0 评论 -
hdu 1846 - Brave Game(简单博弈)
典型的巴什博弈代码如下:int main(){ int n, m, t; scanf("%d", &t); while(t--) { scanf("%d%d", &n, &m); if(n%(1+m)) puts("first"); else puts("second"); }}原创 2013-10-28 22:54:39 · 641 阅读 · 0 评论 -
hdu 1848 - Fibonacci again and again(简单博弈)
裸的sg函数题目代码如下:const int M = 1005;int f[M], sg[M];void getSG(){ sg[0] = 0; for(int i = 1; i < M; ++i) { bool vis[M]; memset(vis,0,sizeof(vis));原创 2013-10-29 00:02:51 · 801 阅读 · 0 评论 -
hdu 2509 - Be the Winner(简单博弈)
思路: 跟hdu1907一样的,都是尼姆博弈的裸应用,把每组苹果都看作一堆待取的物品,则一次只能从一个堆上取若干个(不少于1个).取最后一个苹果的人输掉。 唯一不同的地方是对于一个堆,某人取过以后可以变成两个堆,例如题目中所说的{@@@}--->{@ @};但这个并不影响结果,因为对于任意的T2状态不管怎么取,都是只能变作S1状态和S2状态。代码几乎和1907的一模一样。原创 2013-10-28 15:18:27 · 751 阅读 · 0 评论 -
hdu 1517 - A Multiplication Game(博弈)
这道题目稍微上点难度了。 题意:(from:http://www.cnblogs.com/kuangbin/archive/2011/08/29/2158581.html) 2 个人玩游戏,从 1 开始,轮流对数进行累乘,直到超过一个指定的值。 解题思路: 如果输入是 2 ~ 9 ,因为Stan 是先手,所以Stan 必胜 如原创 2013-10-29 11:46:31 · 867 阅读 · 0 评论 -
hdu 1536 | hdu 1944 - S-Nim(博弈-SG)
题目很啰嗦,说白了就是sg函数的简单运用,因为还没有理解sg函数的原理,只能先套用模板了~~代码入下:const int M = 10005;int n, sg[M], f[105];int getSG(int x){ int &ans = sg[x]; if(ans!=-1) return ans; bool vis[110];原创 2013-10-28 22:00:21 · 805 阅读 · 0 评论 -
hdu 3038 - How Many Answers Are Wrong(并查集)
题意: 已知多个描述,每个描述都给出一个区间的它的和,求这些描述中错误描述的个数。思路: 思路和poj1733差不多,就是把利用并查集把所有区间的起点和终点都放到集合里面,其中s[x]用来表示区间(p[x], x]的和,其他合并区间和路径压缩的公式也很好推,具体的见代码。 另外需要说的是:杭电坑爹,任何题目都要写成多case。。。代码如下:const原创 2013-10-23 12:55:14 · 554 阅读 · 0 评论 -
hdu 1847 - Good Luck in CET-4 Everybody!(简单博弈)
简单的sg函数的应用。。虽然写出了sg函数,但目前还不理解其中的原理。代码如下:const int M = 1005;int sg[M];void getSG(){ sg[0] = 0; for(int i = 1; i < M; ++i) { bool vis[M]; memset(原创 2013-10-28 23:10:41 · 751 阅读 · 0 评论 -
hdu 4717 - The Moving Points(三分)
本解析转自:http://www.cnblogs.com/acmdeweilai/archive/2013/09/11/3315769.html说明下为啥满足三分:设y=f(x) (x>0)表示任意两个点的距离随时间x的增长,距离y的变化。则f(x)函数单调性有两种:1.先单减,后单增。2.一直单增。 设y=m(x) (x>0)表示随时间x的增长,所有点的最大距离y的变化。原创 2013-09-12 08:42:40 · 909 阅读 · 0 评论 -
hdu 4193 - Non-negative Partial Sums(滚动数列)
题意:给定一个由n个整数组成的整数序列,可以滚动,滚动的意思就是前面k个数放到序列末尾去。问有几种滚动方法使得前面任意个数的和>=0.思路:先根据原来的数列求sum数组,找到最低点,然后再以最低点为始点,求解题目答案,(每求解一始点i,符合要求的条件为:sum[i]>=minx,[minx是i=sum[i])代码如下:#include #include #include原创 2013-09-07 11:20:29 · 703 阅读 · 0 评论 -
hdu 4698 - Counting(思路)
转:题意:给定一个二维平面,其中x取值为1-N,y取值为1-M,现给定K个点,问至少包括K个点中的一个的满足要求的共有多少中取值情况。也就是说K个点中至少一个点落在所给定的区间内。解法:正面求解,由于点只有1000个,因此直接暴力离散化之后的x轴坐标,对于y轴则可以通过增加一个一个加入点,使用一个set来维护纵轴有多少种不同的取法。代码如下;#include #inclu原创 2013-08-31 11:47:58 · 916 阅读 · 0 评论 -
hdu4552 - 怪盗基德的挑战书
没想到自己是这么的水,若干人都说水 的题,我竟然没做出来啊,,,其实看了人家的代码,,发现这道题就是水 啊啊 啊啊啊啊啊。。。。自己的想法:先取出子串,,,然后字符串匹配,,尽管我用了kmp算法,,但是交上还是严重的超时啊啊啊啊a正确思路:尽管有什么ac自动机,后缀数组,,我们暴 力就可以了,代码很短,思路很明了,,所以我就介绍暴力的思想,(其实那两种算法,身为大菜鸟的我还不会原创 2013-05-19 11:58:19 · 1281 阅读 · 0 评论 -
hdu 4628 - Pieces(压缩dp)
题意:给定一个串,每次可以删除一个回文子串,问把全串删干净的最少次数。思路:用状态压缩把所有的状态枚举出来,用数组记录所表示状态所有字符被删除干净的最少次数。状态:dp[x]表示在状态x下把所有字符删除的最少次数。状态压缩:dp[x] = min{dp[x], dp[k]}(k是x的子集)这样的dp的边界不再是dp[0]或dp[n]了。而是对每个状态都要设定原始值,如果某个原创 2013-07-30 19:56:49 · 1127 阅读 · 4 评论 -
hdu4608 - I-number(水题)
有点大数的意思。。。从给定的X往上加就行了。。。对于n位的数字来说, 假如不需要增加长度就可以找到Y的话,那么Y 证明:假如前n-2位的数字之和为CC, 则CC%10肯定是位于【0...9】之中的,所以后两位只需对应凑出【10....1】即可。 其中为了凑出10需要用两位形成【19,28,37,,,91】中的数,所以我们最多只需要动用两位。原创 2013-07-23 20:48:50 · 845 阅读 · 0 评论 -
hdu4618Palindrome Sub-Array(乱搞)
多校联赛第二场1008结题报告上竟然给的是乱搞二字。题意:从矩阵中找最大的正方形子矩阵使得每行每列的数字是符合回文。输出最大的边长。1、动归 状态;dp[i][j][k]表示以(I,j)为左上角坐标点且边长为k的子矩阵是否符合回文。状态转移:dp[i][j][k] = 1 (如果dp[i-1][j-1][k-2]==1&&外围的四条边上的数字符合回文, 否则dp[i][j][原创 2013-07-25 20:16:18 · 820 阅读 · 0 评论 -
hdu4619 - Warm up 2(联通图or贪心0r二分图匹配)【待完善】
这道题好多种做法,,,1、联通图。 由于题目特点,这道题可以转化为求图的改图的子联通图,每个包含x个点的联通图都可以最多得到不重叠的x/2个牌。注意这句话:很重要的(It's guaranteed the dominoes in the same direction are not overlapped, but horizontal and vertical dominoes原创 2013-07-25 21:31:39 · 1411 阅读 · 0 评论 -
hdu 1003 - Max Sum(分治of贪心)
今天比赛的一道题目,有位同学写的代码比我写的好多了,而且有点贪心的意思,所以就贴了上来,用sum来存前面的正和,如果sum这是因为前面的和小于0的话,对后面的最大连续和,做不了贡献,反而会拖了后腿。如果现在的sum比max要大的话,则更新答案,代码如下:#include #define M 100005#define INF 0x7fffffffint main (){原创 2013-08-03 11:42:58 · 709 阅读 · 0 评论 -
hdu4602 - Partition(公式推导)
题意:对于每个数的分解,列出其元素的出现的个数。思路:比赛的时候把1~5的每个元素的个数列出来后就可以简单看出其中的固定规律 1 2 3 4 51 1 2 5 12 282 1 2 5 123 1 2 54 1 25原创 2013-07-24 21:24:36 · 1285 阅读 · 1 评论 -
hdu 4000 - Fruit Ninja(树状数组)
题意:给定一个1到n的排列,输出三元组(x,y,z) (满足条件x思路:建立树状数组,对于每个位置都求出前面比a[i]小的数字的个数L,好后面比a[i]大的数字的个数R, 则有该位置作为开始的的满足条件的三元组包含在R(R-1)个中,当然其中参杂着(x,y,z)(x代码如下:#include #include #include #include #include #i原创 2013-08-04 15:05:36 · 653 阅读 · 0 评论 -
hdu 3833 YY's new problem(简单哈希)
刚开始的时候虽然也用了哈希,但复杂度是n^n的,所以果断的tle了。搜了一篇题解,顿时,膜拜之意油然而生,虽然复杂度都是n^n的,但是大神的代码果断的优化了。把复杂度从10^8降到了10^7了。同样使用哈希,达到的效果果断的有天差地别呀。。。代码如下:#include #include #include #include #include #include #inclu原创 2013-08-04 15:57:10 · 703 阅读 · 0 评论 -
hdu 2438 - Turn the corner(三分)
题意:已知x,y,l,d,要求判断汽车能不能安全通过该转角。思路:三分角度,求解h 的最大值,若max>y的话,则汽车能安全通过,否则便不能安全通过。代码如下:#include #include #include #include #include #include #include #include #include #include #define原创 2013-08-05 20:09:02 · 735 阅读 · 0 评论 -
hdu 4648 - Magic Pen 6(“水”题)
摘自题解: 题意转化一下就是:给出一列数a[1]...a[n],求长度最长的一段连续的数,使得这些数的和能被M整除。分析:设这列数前i项和为s[i],则一段连续的数的和 a[i]+a[i+1]+...+a[j-1]+a[j]=s[j]-s[i-1],所以这段连续的数的和能被m整除的条件就是 (s[j]-s[i-1]) % m == 0,即 s[j]%m-s[原创 2013-08-06 19:23:40 · 736 阅读 · 0 评论 -
hdu 4651 - Partition(五边形数定理)
定理详见维基百科。。。。http://zh.wikipedia.org/wiki/%E4%BA%94%E9%82%8A%E5%BD%A2%E6%95%B8%E5%AE%9A%E7%90%86代码如下:#include #include #include #define LL long long#define INF 0x7fffffff#define MOD 1000000007原创 2013-08-06 21:33:49 · 1006 阅读 · 0 评论 -
hdu 4647 - Another Graph Game(思路题)
摘自题解:若没有边权,则对点权从大到小排序即可。。考虑边,将边权拆成两半加到它所关联的两个点的点权中即可。。。因为当两个人分别选择不同的点时,这一权值将互相抵消。代码如下:#include #include #include #define LL long long#define INF 0x7fffffff#define M 100010using name原创 2013-08-06 19:51:52 · 792 阅读 · 0 评论 -
hdu - 3959 Board Game Dice(数学)
这道题比赛中没做出来,赛后搞了好久才出来的,严重暴露的我薄弱的数学功底,这道题要推公式的,,,有类似于1*a+2*a^2+3*a^3+...+n*a^n的数列求和。最后画了一张纸才把最后的结果推出来。::(x*M^x)/N.而且通过这道题我发现有些数学函数还不如直接循环来的快,例如这道题中求x的值的时候。方法一:int x = int(log(n)/log(m)+0.5);原创 2013-08-16 20:56:36 · 871 阅读 · 0 评论 -
hdu - 3952 Fruit Ninja(简单几何)
思路来自于:http://www.cnblogs.com/wuyiqi/archive/2011/11/06/2238530.html枚举两个多边形的两个点组成的直线,判断能与几个多边形相交因为最佳的直线肯定可以经过某两个点(可以平移到顶点处),所以暴力枚举两个点就好了如果有模版的话,写代码就快多了。代码如下:#include #include #include #i原创 2013-08-17 15:01:11 · 684 阅读 · 0 评论 -
hdu 3951 - Coin Game(找规律)
这道题是有规律的博弈题目,,,所以我们只需要找出规律来就ok了牛人用sg函数暴力找规律,菜鸟手工模拟以求规律。。。【牢骚】if(m>=2){if(nelse {first无法一口吃掉所有的,所以second成了主动的了,如果first第一口吃掉k1个,那么明智的second只要吃掉k2个就可以了(n-k1-k2是偶数,也包括0的),使得 剩下的数字是分成两个数字数目相等原创 2013-08-17 15:28:20 · 680 阅读 · 0 评论 -
hdu 1850 - Being a Good Boy in Spring Festival(简单博弈)
思路: 尼姆博弈的变形, 对于每个堆都遍历一下,若起始状态已是T态,则ans = 0; 否则,就求其他n-1个数的异或值temp, 如果temp代码如下:const int M = 105;int a[M];int main(){ int n; while(~scanf("%d", &n) && n) {原创 2013-10-28 23:50:14 · 673 阅读 · 0 评论