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秒,點一首超長的就能多唱好久。按照給定歌曲的順序,依次決定要不要唱這首歌就好了。如果不唱...