POJ-2887(块状链表)
2015-02-21 00:10
411 查看
题目:http://poj.org/problem?id=2887
我的块状链表第一题,调了好久~~~~(>_<)~~~~ ,好在从思路到编码到调试都是自己搞的
我的块状链表第一题,调了好久~~~~(>_<)~~~~ ,好在从思路到编码到调试都是自己搞的
#include <cstdio> #include <cstring> #define MAX_LEN 6000 #define HALF_LEN 3000 #define MAX_COUNT 1000 struct Node{ char str[MAX_LEN]; size_t len; Node* next; } node[MAX_COUNT] = {0}; size_t nex = 0; inline Node* newNode(){ return node + nex++; } struct BigString{ Node* head; BigString(const char* s, size_t n){ head = newNode(); if(n <= HALF_LEN){ memcpy(head->str, s, n); head->len = n; return; } memcpy(head->str, s, HALF_LEN); head->len = HALF_LEN; Node* p = head; size_t i = HALF_LEN; for(; i + HALF_LEN < n; i += HALF_LEN){ p->next = newNode(); memcpy(p->next->str, s + i, HALF_LEN); p->next->len = HALF_LEN; p = p->next; } p->next = newNode(); memcpy(p->next->str, s + i, n - i); p->next->len = n - i; } void insert(Node* p, char ch, size_t pos){ memmove(p->str + pos + 1, p->str + pos, p->len - pos); p->str[pos] = ch; ++p->len; if(p->len < MAX_LEN) return; Node* q = p->next; p->next = newNode(); memcpy(p->next->str, p->str + HALF_LEN, HALF_LEN); p->next->len = HALF_LEN; p->next->next = q; p->len = HALF_LEN; } void insert(char ch, size_t pos){ Node* p = head, *q; size_t len = 0; while(p && len + p->len <= pos){ len += p->len; q = p; p = p->next; } if(!p){//append ch at last node insert(q, ch, q->len); } else{//insert ch at pos - len insert(p, ch, pos - len); } } char operator[](size_t pos)const{ Node* p = head; size_t len = 0; while(len + p->len <= pos){ len += p->len; p = p->next; } return p->str[pos - len]; } }; char s[1000005]; int main() { gets(s); BigString bs(s, strlen(s)); int n, i; for(scanf("%d", &n); n--; ){ scanf("%s", s); if(s[0] == 'Q'){ scanf("%d", &i); putchar(bs[i - 1]); putchar('\n'); } else{ scanf("%s%d", s, &i); bs.insert(s[0], i - 1); } } return 0; }
相关文章推荐
- poj 2887 块状链表 单点插入+单点查询
- POJ 2887 Big String(块状链表)
- POJ 2887 Big String(块状链表)
- poj 2887 Big String 块状链表
- poj 2887 Big String(块状链表)
- [POJ 2887] Big String [块状链表]
- POJ 2887 块状数组
- poj2882 Big String(数据结构 - 块状链表)
- 块状链表(附NOI 2003 Editor,POJ 2131 Key Insertion)
- 【POJ 2887】Big String(块状数组)
- POJ 2887 分块链表 , vector 实现
- Poj 2887 Big String(块状数组)
- poj 2887 块状数组
- [POJ 2104] K-th Number [块状链表]
- poj 2887 块状数组/线段树
- poj 2828 块状链表 OR 线段树 OR 树状数组
- poj 3468 块状链表 区间修改+区间查询
- 块状链表基本操作及相关例题
- zoj 2887 || poj 3439 Server Relocation
- uva12538 Version Controlled IDE(可持续化Treap * 模板, STL ext/rope(块状链表))