You are on page 1of 3

Mt vi gi PTIT Summer round 2

Bi A: Tm s.
Gi s n = k1*(k1 + 1)/2 + k2*(k2+1)/2 v 1 <= k1 <= k2.
Nn ta c k1(k1+1) <= 10^9 => k1^2 < 10^9. Ta gii hn c k1.
Duyt k1, ri tm k2 bng nhiu cch khc nhau nh gii h, cht nh phn v..v
Bi B: Dy s.
Ta s thy vic tnh F(a) ch mt khong log2(a), v gi tr hm F cng ch vo khong log(a),
y l mt gi tr nh.
Gi s c k s c gi tr hm F cng gi tr vy s c k*(k-1)/2 cp cho cng gi tr.
Tng t cho cc gi tr khc. Kt qu l tng tt c cc cp c c ca mi gi tr.
Bi C: Tr chi snake.
Duyt BFS. Kh khn nm vic nh du trng thi duyt. Ta s lu li trng thi bng cch
lu ta ca u con rn, v lu v tr tng i gia cc khc th i vi khc th i+1ca con
rn. C 4 hng, ta nh s l 0,1,2,3. Nh vy, cn dng 2 bit m ha cho mt v tr tng
i gia 2 khc lin tip. Con rn c chiu di ti a bng 9, trng hp ny nh du trng thi
bao gm ta u rn + dy 16 bit m ha v tr tng i gia cc khc lin tip.
V d:
4 5
##...
..1#@
432#.
...#.
u con rn c ta hng 2, ct 3. V tr tng i gia cc khc lin tip (t u rn) l
xung, tri, tri.
phc tp: con rn c chiu di ln nht bng 9, trng thi cn lu gm 8 v tr tng i gia
cc khc lin tip, s trng thi phi duyt ti a 15*15*16^2.
Bi D: Cu thn ch ca Alidada.
Cch th nht: Hashing + cht nh phn.
Tm tp cc gi tr di L c S[1..L] = S[S.length L+1, S.length]. Vi Hashing, chi ph kim
tra cho mi gi tr l l O(1).
Sau cht nh phn tm gi tr L ln nht trong tp hp trn sao cho tn ti a tha mn
S[1..L] = S[a..a+L-1] vi 2 <= a <= S.length L.
Cch th hai: s dng thut ton KMP.
Trong thut ton KMP, hm next[i] = j s cho ta bit S[1 .. j] = S[i j+1 .. i].
Bi E: Tp hp.
Mt bi ton sinh thng thng. Gii hn k nh (k <= 10), sinh ra tt c cc b s ri kim tra.
Bi F: So snh DNA.
Bi ton dy con chung di nht. phc tp bng s test * n^2.
Gi F[i][j] l di dy con chung di nht ca dy a[1..i] v b[1..j], c kt thc ti a[i] v b[j].
Thut ton quy hoch ng nh sau:
FOR(i,1,n) FOR(j,1,n){
if(abs(a[i]-b[j]) <= 1) F[i][j] = F[i-1][j-1]+1;
else F[i][j] = 0;
}
p s bng max F[i][j] vi mi i, j. Trong bi ton ny ta cn iu kin di dy con chung
ln hn hoc bng (n+1)/2.
Bi G: M ha.
Bi ton khng kh. Cn trnh li nhp xu trong khi c d liu.
Bi H: Truy tm kho bu.
Sp xp topo.
Sp xp topo trong th l sp xp danh sch th t cc nh sao cho vi mi cung u v ca
th th nh u nm trc nh v trong danh sch sp xp.
Vi bi ton ny, coi mi ch dn l mt cung ca th, chng ta cn tm ra mt th t topo ca
danh sch nh. Nu khng c cch sp xp no, c ngha l th c chu trnh, trng hp
recheck hints, nu c nhiu cch sp xp tha mn s l trng hp missing hints.
Cch gii quyt: Duyt DFS hoc tham lam nh sau: ln lt loi b i cc nh c bc vo bng
0. Nu khng loi b ht c n nh, s tn ti chu trnh trong th. Trong trng hp ngc
li, nu ti thi im no m c nhiu hn 2 nh c bc vo bng 0, trng hp ny s c
nhiu p n. Nu khng, in ra danh sch nh theo th t xa.
Bi I: Hng ro.
Bi J: Ct bnh.
Cht nh phn.
Vi im P(0, b) bt k nm trn trc Oy, ta lun tm c aL sao cho ng thng y = aL+b
chia a gic bn tri thnh hai hnh bng nhau. Tm aL bng cch s dng cht nh phn cho n
khi din tch 2 phn b ct bi ng thng l bng nhau. Tng t cho vi aR.
Ta cn tm im P sao cho 2 ng thng ny trng nhau, tc aL = aR.
Khi b tng (im P dch ln trn), aL tng. Vi hnh bn phi, khi b tng th aR gim. Xt hm s
a(b) = aL(b) aR(b) l mt hm s ng bin theo b. Khi b tin ra dng v cng, aL(b) aR(b)
> 0, khi b tin ti m v cng, aL(b) aR(b) < 0. Do , phng trnh a(b) = 0 lun c nghim
v l duy nht. Da vo tnh cht ng bin ca hm a(b), ta s cht nh phn tm b.
Thut ton nh sau:
lowB = -infi, highB = infi, midB;
while(lowB <= highB){
midB = (lowB+highB)/2;
using binary search to find aL and aR;
if(aL == aR) return aL and midB;
else if(aL < aR) lowB = midB;
else if(aL > aR) highB = midB;
}

You might also like