演算法競賽入門經典 例題4 5

2021-09-27 13:36:49 字數 1784 閱讀 7514

uva512

spreadsheet tracking

給定乙個**,和一些操作序列,輸出給定單元格在這些操作後的位置。

如果在整個**上模擬操作,那麼就需要記錄原始**和最終**中每乙個單元格的對應關係,比如可以通過給單元格內容編號,新加入的單元格編號全0,刪除原始單元格則編號全部改-1,最後在整個**中搜尋原始編號來判斷該單元格的最終狀態。

但是上述操作太麻煩。記得之前看過乙個部落格,說如何做乙個文字編輯器。看似簡單的程式其實特別複雜,主要是插入和刪除操作特別難做。用陣列就會導致大量的資料移動,但是用鍊錶又特別不值,所以需要有一些折中的做法。

但是對於這道題,只是計算末尾位置,並不要求輸出**內容,所以可以對每乙個輸入都模擬一遍操作。

#include

#include

#include

#define dr 0

#define dc 1

#define ir 2

#define ic 3

#define ex 4

using

namespace std;

void

delrow

(const vector<

int>

&viops,

int&r)

} r -

= del;

}void

delcol

(const vector<

int>

&viops,

int&c)

} c -

= del;

}void

addrow

(const vector<

int>

&viops,

int&r)

r += add;

}void

addcol

(const vector<

int>

&viops,

int&c)

c += add;

}void

exchg

(const vector<

int>

&viops,

int&r,

int&c)

else

if(viops[3]

== r && viops[4]

== c)

}void

track

(const

int cnt,

const

int row,

const

int col,

const vectorint>>

&vviops)

if(r ==

0|| c ==0)

break;}

if(r ==

0|| c ==0)

else}}

intmain()

else

if(strop[1]

=='r')}

else

if(strop[1]

=='c')}

}track

(++cnt, r, c, vviops);}

return0;

}/*7 95

dr 2 1 5

dc 4 3 6 7 9

ic 1 3

ir 2 2 4

ex 1 2 6 5

44 8

5 57 8

6 50 0

*/

演算法競賽入門經典例題

7744問題 問題 輸出所有形如aabb的四位完全平方數 即前兩位數字相等,後兩位數字也相等 include include int main 開燈問題 include include define maxn 1010 int a maxn int main int n,k,first 1 mems...

演算法競賽入門經典 例題4 1

uva1339 ancient cipher 題目意思為判斷明文是否可以經過位置變換以及字母替換得到密文。因為不需要輸出替換方案,只判斷存在性,那就先不考慮搜尋。位置變換不用考慮,因為只要長度一樣,就肯定能逆回去,關鍵是字母替代。可以把明文和密文先進行排序,然後看模式是否相同,比如題目中第一組測試資...

演算法競賽入門經典 例題9 5

uva 12563 jin ge jin qu hao 這題的背景我也是服了。這是乙個揹包問題,可以簡述為有n首歌,每首歌只能唱1次,要求在所剩不多的t秒內,唱盡可能多的歌,同時唱得盡可能的長。這樣即使最後只剩1秒,點一首超長的就能多唱好久。按照給定歌曲的順序,依次決定要不要唱這首歌就好了。如果不唱...