例題6-4 broken keyboard (a.k.a. beiju text) uva - 11988
這道題目可以直接用stl中list雙向鍊錶來做,思路和**都很簡單易想。也可以用陣列模擬鍊錶(不易懂)。
之所以不用vector是因為插入刪除比較慢慢慢
ac**(一):
stl的list版本
#include
#include
#include
using
namespace
std;
int main()
}for(it=l.begin();it!=l.end();it++)
cout
<<*it;
cout
0;}
ac**(二):
陣列模擬鍊錶版本
//陣列模擬鍊錶
#include
#include
const int maxn=100000+5;
intnext[maxn];//next[i]表示鍊錶中第i個結點下乙個結點的編號
char s[maxn];
int cur;//當前游標所在位置,即指向當前結點的右側
intlast;//當前最後乙個結點的編號
int main()
}//上述過程完成了建立乙個鍊錶的過程,next[0]的值就是第乙個字元的下標,next[1]就是第2個節點
//的下標,以此類推,最後乙個節點的next必然是-1,想想鍊錶建立過程,依次往後指,這一點應該很明白
for(int i=next[0];i!=-1;i=next[i])
printf("%c",s[i]);
printf("\n");
}return
0;}
c語言**(超時為何?):
#include
#include
const int maxn=100000+5;
char s[maxn];
typedef struct linknode,*linklist;
void linklist_init(linklist &lis)
void linklist_insert(linklist &lis,char e)
int main()
else
}node *tmp=lis;
while(tmp->next)
printf("\n");
}return
0;}
#include
const int maxn=100000+5;
int n,m;
int left[maxn],right[maxn];
int kase=0;
void link(int l,int r)
int main()
left[0]=n;right[0]=1;
int op,x,y;
bool inv=0;
while(m--)//x,y相鄰的情形統一變為y在x右側
//下面這個復合語句坑我了,下面這麼寫是對的,下面的復合語句全部用if,if是錯的
if(op==1 && x==left[y]) continue;
if(op==2 && x==right[y]) continue;
int lx=left[x],rx=right[x],ly=left[y],ry=right[y];//這樣已經儲存了x,y的左右值哦,這樣很方便後續操作
if(op==1)
else
if(op==2)
else
if(op==3)
else}}
}int j=0;
long long int ans=0;
for(int i=1;i<=n;i++)
if(inv && n%2==0) ans=(long long)n/2
*(n+1)-ans;
printf("case %d: %lld\n",++kase,ans); }
return
0;}
刷題 紫書第六章 資料結構基礎(習題)
上世紀的final題怎麼全是碼農題啊,寫著好難受 uva673 括號匹配 bug free失敗,原因是有空行 vjudge 200題紀念!uva712 二叉樹,每層都有乙個權值 uva536 由先序和中序求後序 後序是左右中啊!uva439 bfs 注意範圍是0到7 uva1600 bfs 狀態多加...
第六章 資料結構
存放同一種資料型別的多個元素的容器,通過索引 記憶體偏移量 進行元素的訪問,陣列的大小一旦確定就不能改變。陣列其實也是線性表結構,在記憶體中陣列的元素是緊挨著連續儲存的。特點 查詢快 增刪慢 舉例 定義乙個陣列 int arr new int 想在2的後面插入乙個新的元素11,這時候就需要定義乙個新...
資料結構第六章樹
第六章 樹 1.樹是n個結點的有限集。n 0時稱為空樹。在任意乙個非空樹中 1 有且僅有乙個特定的稱為根的結點 2 當n 1時,其餘節點可分為m個互不相交的有限集,其中每乙個集合又是一棵樹,並成為根的子樹。2.結點分類 結點擁有的子樹稱為結點的度。度為0的結點稱為葉結點或終端節點 度不為0的結點稱為...