UVA 11988 链表
来源:互联网 发布:金南俊 和王嘉尔 知乎 编辑:程序博客网 时间:2024/05/01 01:20
之前遇到字典树什么的要不就用指针链表,要不直接上list。
数组链表主要思想和指针差不多。
指针是用*next记录下一个的地址然后形成链。
数组本身开辟空间时便是一个地址所以也可以达到这点。
比如 int a[11]; a[0]=1; a[1]=2; a[2]=4; a[4]=3;
仔细分析一下数组a的下标再不断增大,但是记录的数据却在更新。
所以可以大致写出
int next[11];
int now=0; //光标
for(int i=1;i<=n;i++)
{
next[i]=next[now]; // 更新数据
next[now]=i; // 记录位置
now++; //光标移动
}
不同题目光标跳动方式不同,现在上例题
小紫书UVA 11988
题目大意输入一串字符(空格用'_'代替)其中字符‘[’表示HOME建(光标移到最前面) 字符 ']' 表示END键(光标移到最后) 输出运行后的字符串(长度100000);
样例输入 This_is_a_[Beiju]_text
样例输出 BeijuThis_is_a_text
拿到题目如果字符串长度小的话可以直接暴力模拟。
不过字符串长为100000的话如果插入一个数到最前面后面的都要往后移动这样时间量就大了(系统不想跟你说话同时丢给你一个TLE)
所以要用到链表
不同的是光标可能跳到最前面或者最后面所以要设一个变量记录当前最后的位置
代码如下
#include<stdio.h>
#include<string.h>
#define Max 100000
int main()
{
char s[Max+5];
int next[Max+5];
int now;
while(~scanf("%s",s+1)) //从第1位开始保留0位作为起始
{
memset(next,0,sizeof(next));
int i,ed=0; //设置当前最后位置为0
now=0; //初始化光标
for(i=1;i<=strlen(s+1);i++)
{
if(a[i]=='[') now=0; //光标移至最前
else if(a[i]==']') now=ed; //光标移至最后
else {
next[i]=next[now]; //更新next数组
next[now]=i;
if(ed==now) ed=i; //更新末位
now=i; //更新光标
}
for(i=next[0];i!=0;i=next[i])
printf("%c",s[i]);
printf("\n");
]
}
数组链表主要思想和指针差不多。
指针是用*next记录下一个的地址然后形成链。
数组本身开辟空间时便是一个地址所以也可以达到这点。
比如 int a[11]; a[0]=1; a[1]=2; a[2]=4; a[4]=3;
a[a[0]]=a[1]=2这样就达到了将 1 2 4 3 接到一起。
仔细分析一下数组a的下标再不断增大,但是记录的数据却在更新。
所以可以大致写出
int next[11];
int now=0; //光标
for(int i=1;i<=n;i++)
{
next[i]=next[now]; // 更新数据
next[now]=i; // 记录位置
now++; //光标移动
}
不同题目光标跳动方式不同,现在上例题
小紫书UVA 11988
题目大意输入一串字符(空格用'_'代替)其中字符‘[’表示HOME建(光标移到最前面) 字符 ']' 表示END键(光标移到最后) 输出运行后的字符串(长度100000);
样例输入 This_is_a_[Beiju]_text
样例输出 BeijuThis_is_a_text
拿到题目如果字符串长度小的话可以直接暴力模拟。
不过字符串长为100000的话如果插入一个数到最前面后面的都要往后移动这样时间量就大了(系统不想跟你说话同时丢给你一个TLE)
所以要用到链表
不同的是光标可能跳到最前面或者最后面所以要设一个变量记录当前最后的位置
代码如下
#include<stdio.h>
#include<string.h>
#define Max 100000
int main()
{
char s[Max+5];
int next[Max+5];
int now;
while(~scanf("%s",s+1)) //从第1位开始保留0位作为起始
{
memset(next,0,sizeof(next));
int i,ed=0; //设置当前最后位置为0
now=0; //初始化光标
for(i=1;i<=strlen(s+1);i++)
{
if(a[i]=='[') now=0; //光标移至最前
else if(a[i]==']') now=ed; //光标移至最后
else {
next[i]=next[now]; //更新next数组
next[now]=i;
if(ed==now) ed=i; //更新末位
now=i; //更新光标
}
for(i=next[0];i!=0;i=next[i])
printf("%c",s[i]);
printf("\n");
]
}
0 0
- UVA 11988 链表
- UVA 11988 链表
- UVA 11988 Broken Keyboard 链表
- UVA 11988 Broken Keyboard 【链表】
- UVA 11988 Broken Keyboard (链表)
- UVA 11988
- UVA 11988
- uva 11988
- uva 11988
- UVa 11988
- uva 11988
- UVA - 11988
- UVA 11988
- [UVA]11988
- uva 11988
- uva 11988 破损的键盘(链表)
- Uva 11988 Broken Keyboard
- UVa 11988 ------ Broken Keyboard
- hibernate中提倡持久类实现equals()和hashCode()分析
- 返回值的问题(oj2136)
- c3p0 Connections could not be acquired from the underlyingdatabase!异常
- 高德,百度,Google地图定位偏移以及坐标系转换
- LintCode 81 -- 数据流中位数
- UVA 11988 链表
- std::list::back带来的坑
- 在ubuntu14.04中设置telnet连接,以及使用ultralEdit/SecureCRT登陆
- 利用孪生素数判断素数
- C#学习之System.Collections.Generic 与 System.Collections 记录
- [Android5.1]关机工作流程
- 【SSH网上商城项目实战12】添加和更新商品功能的实现
- spoj 26130Binary numbers
- Android ImageLoader用法总结