摘要: 这题的关键是如何统计转移的次数根结点都是最多移动一次的,所以记录移动次数时把自己的加上父亲结点的就是移动总数了这里要注意:更新移动次数时,一定要先更新父亲的,在更新自己的,即用递归从最顶层开始往下更新 我的方法是在调用find_root前先更新一下,再路径压缩。网上看了有人写的,在查找父节点的时候同时更新的代码:int find_root(int x){ int fa; if(father[x]==x) return x; fa=find(father[x]); int tmp=father[x]; trans[x]+=trans[tmp]; ... 阅读全文
posted @ 2013-08-29 16:07 辰曦~文若 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 今天第二场比赛,搞笑的是8道题目,名称都被学长改成白居易的《长恨歌》里的诗句。A -临别殷勤重寄词B -词中有誓两心知C -七月七日长生殿D -夜半无人私语时E -在天愿作比翼鸟F -在地愿为连理枝G -天长地久有时尽H -此恨绵绵无绝期!直接被惊呆了啊!!!最上面还飘过一句话: “长恨歌 白居易 --------- 题目不难,就是不会做。”题目真的是,不,不难。。。A了两道,一道题目看不懂,还是百度了题意才A的,A的两道题见博客。16个人里面排名5。A了5、4、3的个一人。唉,没法和他们比啊。做的题目少,果真对题目的判断里明显弱爆了,知识也很少。。。 阅读全文
posted @ 2013-08-28 19:22 辰曦~文若 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 一开始不懂啊,什么Home键,什么End键,还以为相当于括号,[]里的东西先打印出来呢。后来果断百度了一下。 悲催啊。。。题意:给定一个字符串,内部含有'['和']'光标转移指令,'['代表光标移向文章头,']'代表光标移向文章尾,问最终在屏幕上显示的字符串序列是什么思路:直接模拟一下即可,不过因为由于会可能移动到字符串开头以及结尾,所以我开了3个char数组。 str1存储由于'['的原因而打印在开头的字符,str3存储由于']'的原因打印在结尾的字符,str2则是存储一开始在没遇到'[& 阅读全文
posted @ 2013-08-28 19:05 辰曦~文若 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 题意:将点放在两个集合,同一个集合的边保留,不同集合的边删去,使得边至少减少一半。 输出任何一种方案即可。如果不能,输出Impossible思路:设如果两个人为一对捣蛋鬼,则two[i][j]=two[j][i]=1,即用边表示关系 刚开始设集合为A、B,为空集。然后每次取一个点,往集合里加,加入到哪个集合使得增加的边最少就加入到那个集合中。#include #include #include #include using namespace std;int two[110][110];//two[i][j]=1表示i和j是一对捣蛋鬼int n,m;int vis[110];//vis[i.. 阅读全文
posted @ 2013-08-28 18:51 辰曦~文若 阅读(435) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一棵二分搜索树,再给一个节点编号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 辰曦~文若 阅读(152) 评论(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 辰曦~文若 阅读(239) 评论(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 辰曦~文若 阅读(315) 评论(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 辰曦~文若 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 今天下午从12点开始,4个小时,8道题。A了四道,18个人中排名14。感觉不是很好,有两道题还是在队友提醒的情况下A的。 总之,第一次发挥不是很好,而且再加上做过的题目很少,题目类型不是很清楚,一下子很难找到思路。 慢慢来吧,还有周三、周五两场,好好加油吧! 阅读全文
posted @ 2013-08-26 21:44 辰曦~文若 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 题意:找出幻灯片与编号唯一对应的情况思路: 1:求最大匹配,若小于n,则答案为none,否则转2 (不过我代码没有事先判断一开始的最大匹配数是否#include #include #include #include using namespace std;int n,cnt;bool flag;int edge[50][50]; //edge[i][j]表示j点在第i张幻灯片里int used[50];int matchx[50];struct Slide{ int xmin,xmax,ymin,ymax;}slide[50];struct Num{ int x,y;}n... 阅读全文
posted @ 2013-08-26 10:23 辰曦~文若 阅读(407) 评论(0) 推荐(0) 编辑