UVALive 6577 Binary Tree 二叉树的LRU串
2014-04-29 18:42
246 查看
今天继续攒人品。。。真开心啊O(∩_∩)O~~各种身体不舒服~~
https://icpcarchive.ecs.baylor.edu/external/65/6577.pdf
题意是这样的,现在有一个向下无限延伸的二叉树。然后输入起点(通过只含LRU的字符串S,从根结点开始执行)。LRU分别表示往左儿子走,往右儿子走,往爹娘处走(根结点的爹娘是自己,估计他是石头里蹦出来的)。
然后输入一个可选步骤串T。可以选择T中的子序,从起点开始走。然后问可以走到多少个不同的结点。
比赛的时候不会做啊╮(╯▽╰)╭。赛后好像有题解不过看不懂。。。。英语渣的缘故吧,我猜。。。然后看LC他们的代码,研究下终于搞懂的样子
我们可以先考虑,只有LR的情况,初始化,ans=1,L=1,R=1 。LR分别表示往左(右)走的新结点数量。然后遍历T字符串,然后如果有L则ans+=L,R+=L;其实就是往左走为往右走开辟了往右走的新结点。。。好别扭,不知道怎么解释。。建议画图模拟。。。然后如果有R则ans+=R,L+=R。。。。这个好像是做过的某一题
好了,只有LR的情况解决了=。=
然后如果是现在要up,如果是up到从根执行S串的路途中,那如果up到的结点最后一次往下走是left,那现在up上去必然的结果就是,开辟了一个往右的新结点,反过来是right也一样=。=同时答案+1
有可以参考的人(代码)真好啊~~~好像太依赖参考了。。。
复杂度就O(n)
以上都是在晕晕的状态写的=。=所以有那啥的求评论。。。
Note: 好像忘memset也AC。。。。还是不需要memset?
P.S.边吃饭边发现,那个dir是可以不用memset的~~~看来要多吃饭~~~
View Code
https://icpcarchive.ecs.baylor.edu/external/65/6577.pdf
题意是这样的,现在有一个向下无限延伸的二叉树。然后输入起点(通过只含LRU的字符串S,从根结点开始执行)。LRU分别表示往左儿子走,往右儿子走,往爹娘处走(根结点的爹娘是自己,估计他是石头里蹦出来的)。
然后输入一个可选步骤串T。可以选择T中的子序,从起点开始走。然后问可以走到多少个不同的结点。
比赛的时候不会做啊╮(╯▽╰)╭。赛后好像有题解不过看不懂。。。。英语渣的缘故吧,我猜。。。然后看LC他们的代码,研究下终于搞懂的样子
我们可以先考虑,只有LR的情况,初始化,ans=1,L=1,R=1 。LR分别表示往左(右)走的新结点数量。然后遍历T字符串,然后如果有L则ans+=L,R+=L;其实就是往左走为往右走开辟了往右走的新结点。。。好别扭,不知道怎么解释。。建议画图模拟。。。然后如果有R则ans+=R,L+=R。。。。这个好像是做过的某一题
好了,只有LR的情况解决了=。=
然后如果是现在要up,如果是up到从根执行S串的路途中,那如果up到的结点最后一次往下走是left,那现在up上去必然的结果就是,开辟了一个往右的新结点,反过来是right也一样=。=同时答案+1
有可以参考的人(代码)真好啊~~~好像太依赖参考了。。。
复杂度就O(n)
以上都是在晕晕的状态写的=。=所以有那啥的求评论。。。
Note: 好像忘memset也AC。。。。还是不需要memset?
P.S.边吃饭边发现,那个dir是可以不用memset的~~~看来要多吃饭~~~
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <cmath> #include <string> #include <vector> #include <queue> #include <set> using namespace std; #define ll long long #define inf 0x3f3f3f3f #define eps 1e-8 #define maxn 100010 #define mod 21092013 char a[maxn],b[maxn]; char dir[maxn]; int main(){ int t,ca=0; scanf("%d",&t); while(t--){ scanf("%s%s",a,b); //memset(dir,0,sizeof(dir));// 可以不用memset int dep=0; int la=strlen(a),lb=strlen(b); for(int i=0;i<la;++i){ if(a[i]=='U')dep=max(dep-1,0); else dir[dep++]=a[i]; } int ans=1,l=1,r=1; for(int i=0;i<lb;++i){ if(b[i]=='U'){ if(--dep<0){ dep=0; continue; } ans=(ans+1)%mod; if(dir[dep]=='L')r=(r+1)%mod; else if(dir[dep]=='R')l=(l+1)%mod; } else if(b[i]=='L'){ ans=(ans+l)%mod; r=(r+l)%mod; } else if(b[i]=='R'){ ans=(ans+r)%mod; l=(l+r)%mod; } } printf("Case %d: %d\n",++ca,ans); } return 0; }
View Code
相关文章推荐
- 究竟是测试重要,还是工程重要?
- jquery post方法在servlet中的使用方法
- Spring+mybatis+log4j在控制台输出sql语句
- javascript 实现遮盖层效果
- jsp页面实现打印原图的方法
- mybaits调用函数的方法
- mybaits怎样调用存储过程
- jquery easyui 怎样对datebox赋值 和取值
- ORACLE 中字符串转换为数组的函数方法
- jquery easyui datagrid 中清空数据的方法
- Apache http server linux 安装过程说明
- dedecms忘记管理员密码,修改dede管理员密码的代码,测试可用
- web 中关于清除session会话 中保存的对象的时候 执行删除语句操作
- 获取页面的关闭事件
- html中实现图片的旋转
- java实现图片旋转保存到数据库
- 图片裁剪保存到数据库中的方法
- PL/SQL注册码
- MultiActionController 的用法
- Spring mvc + mybaits