摘要:
题意:给出一棵二分搜索树,再给一个节点编号n,求以这个节点为根节点的子树叶子节点的最大值与最小值。首先求n所在的层数,他的层数就是他的因子中2的个数(规律). n的左右各有num=2^i-1个数。最小值是n-num,最大值是n+num#include #include #include #include #include using namespace std;int t,n;int finds(int n){ for(int i=0;i<=30;i++){ if((1<<i)<=n && n<(1<<(i+1))) return i; 阅读全文
posted @ 2013-08-27 18:11
辰曦~文若
阅读(163)
评论(0)
推荐(0)
摘要:
题意不说了,看原题吧,思路见代码:#include #include #include #include using namespace std;int n;char str[15];int len;char a,b; //a为名字的开头字符,b为名字的结尾字符long long dp[26][26]; //dp[i][j]记录以字母i开头和字母j结尾的朝代名长度 ,最后只要遍历一遍dp[i][i],取最大长度的即可int main(){ int tmp; memset(dp,0,sizeof(dp)); scanf("%d",&n); for(int i=1;i. 阅读全文
posted @ 2013-08-27 18:07
辰曦~文若
阅读(250)
评论(0)
推荐(0)
摘要:
比赛时,第二题就是做的这个,当时果断没仔细考虑,直接用线段树暴力求。结果易想而知,超时了。比赛后搜了搜题解,恍然大悟。思路:显然用线段树,但是由于每次查询都会有变,所以不可能存储题目中的式子。 这里要注意:k的值非常小,所以应该是将式子按二项式定理展开 (i-L+1)^k=(i+(1-L))^k 展开之后可以发现:我们可以在节点存储ai*i,ai*i^2,ai*i^3,ai*i^4,ai*i^5 (L#include #include #include #include using namespace std;const long long mod=1000000007;const int m 阅读全文
posted @ 2013-08-27 18:05
辰曦~文若
阅读(327)
评论(0)
推荐(0)
摘要:
题意:求由a,b,c三个字母组成的长度为n的字符串,其任意连续的至少长度大于等于2的子字符串都不是回文,问这个字符串有多少种?并字典序输出 如果所有种类的字符串总长度大于100000个字符,就输出TOO LONG.思路:先动手写写 如前两个ab,则第三个不能为a,b,只能为c。 接下来,不能为b,c,只能为a。 于是找出规律,某一位上的字母不能与前两位的相同,这样由开头两个字母就唯一确定一串字符串 于是开头两个字母,只有6种,所以不管n(n>=2)取多少,满足要求的都只有6种。 由于样例可能为n=1,所以当n=1时,只要输出a b c即可。#include #inc... 阅读全文
posted @ 2013-08-27 17:59
辰曦~文若
阅读(241)
评论(0)
推荐(0)

浙公网安备 33010602011771号