05 2013 档案
摘要:两棵线段树。 首先,分析一下问题。题目让我们找出所有的 排名以及位置 都在两个乒乓球家之间的所有组合。 两个区间,首先想到的是二维。。。(因为昨天刚刚搞了一个二维)。 发现这种数据是一维的,所以解法一定也是一维。不过又不是普通的一维。。。呵呵,吹水了 我们枚举所有的乒乓球家。找出 他左边的排名比他低的,记为num1,以及右边的排名比他高的,记为num2,那么由他主持的比赛就有num1*num2+(左边人数-num1)*(右边人数-num2)。加起来,就是结果了。 因为我们是枚举,所有可以动态的完成树的更新。每次将取出第 i 个乒乓球家,在右边的树里将他删除,查询比他排名高的,在左...
阅读全文
摘要:A了一晚上。。。 题目看起来就是个线段树,不过是平面的。仍然是二分的思想,我们可以每次横向分,纵向分,即4分。二维线段树吧 贴代码:#include <iostream>using namespace std;#define rect 0,1000,0,1000,1,1#define defhm int hm=(l+r)>>1;#define defvm int vm=(t+b)>>1;#define ltson l,hm,t,vm,pos<<1,posy<<1#define rtson hm+1,r,t,vm,pos<<
阅读全文
摘要:/* * HOJ 3555 Bomb * 花了一晚上时间写的,感觉还是值得的,方法都是自己想的 * 定义d[i][0]为长度是 i 不含49子串的不以4结尾的串的数量 * 定义d[i][1]为长度是 i 不含49子串的以4结尾的串的数量 * 则易知 * d[i][0]=d[i-1][1]*8(除去4,9)+d[i-1][1]*9(除去4) * d[i][1]=d[i-1][0]+d[i-1][1] * 基于此,推出针对小于n的数中不含49子串的串的数量的方法 * 例如45,我们从左往右扫,遇到4,则d[0][1]=1,d[0][0]=4(0,1,2,3) * 遇到5,则d[1][1]=d[0]
阅读全文
摘要:题目不说了,大牛眼中的水题,我等水货想都想不到。。。 直接贴代码,优化的面目全非。。。 后来没有其他测试,只测试了题目中的几个样例以及1000 999之类的,不能保证代码完全正确,欢迎排错/* * 定义 dp[i][j][0]为长度为i以j个0结尾的串的数量 * 推出公式 * dp[i][1][0]=sum(dp[i][k][1])(1<=k&&k<=K) * 优化过程为dp[i][j]=dp[i-1][j-1],即直接加一个与串末相同字符即可 * 计算2的阶乘和计算和时,使用模运算 * 因为dp[i][j][0]==dp[i][j][1],只有dp[i][1]有用
阅读全文
浙公网安备 33010602011771号