Professional Documents
Culture Documents
MC LC
LI M U............................................................................................................................3
PHN I. S HC.....................................................................................................................3
BI 1. 3620. S phong ph - http://vn.spoj.pl/problems/NKABD/.......................................3
Bi 2. 1783. Tm s nguyn t - http://vn.spoj.pl/problems/PNUMBER/.............................7
Bi 3. 3632. S thn thin - http://vn.spoj.pl/problems/NKNUMFRE/...............................10
Bi 4. 4141. Euler Totient Function - http://vn.spoj.pl/problems/ETF/...............................13
PHN II. X L CHUI......................................................................................................14
Bi 1. 4257. First Number - http://vn.spoj.pl/problems/MDIGITS2/...................................14
Bi 2. 3638. Word Counting - http://vn.spoj.pl/problems/WORDCNT/..............................15
Bi 3. Tp s - Chuyn tin 2011...........................................................................................17
PHN III. TH.................................................................................................................19
Bi 1. 2722. Gm c - http://vn.spoj.pl/problems/VMUNCH/............................................19
Bi 2. 2719. Bi c ngon nht - http://vn.spoj.pl/problems/VBGRASS/.............................22
Bi 3. 2721. Nc lnh - http://vn.spoj.pl/problems/VCOLDWAT/...................................25
Bi 4. Hexgame - Chuyn tin 2011......................................................................................27
Bi 5. 3478. Xy dng thnh ph - http://vn.spoj.pl/problems/NKCITY/...........................30
Bi 6. 3125. n trng - http://vn.spoj.pl/problems/QBSCHOOL/...................................34
PHN IV. QUY HOCH NG..........................................................................................37
Bi 1. 2356. Lt gch - http://vn.spoj.pl/problems/LATGACH/..........................................37
Bi 2. 3883. Lt gch 3 - http://vn.spoj.pl/problems/M3TILE/............................................40
Bi 3. 2795. Steps - http://vn.spoj.pl/problems/VSTEPS/....................................................42
Bi 4. 2782. ng i c tng ln nht - http://vn.spoj.pl/problems/QBMAX/ .................44
PHN V. CC BI TON KHC.......................................................................................46
Bi 1. u gi - Chuyn tin 2010.........................................................................................46
Bi 2. Trng xe - Chuyn tin 2010.......................................................................................48
Bi 3. 3480. Cy nh phn tm kim - http://vn.spoj.pl/problems/NKTREE/......................49
2
Bi 4. 2786. Cy khung nh nht (HEAP) - http://vn.spoj.pl/problems/QBMST/...............51
Bi 5. 4031. Mass of Molecule- http://vn.spoj.pl/problems/MMASS/................................52
LI M U
phc v cho vic n luyn thi Olympic khi chuyn tin nm 2012, cc thnh vin
ca i tuyn Olympic chuyn tin nm 2011, Khoa Cng ngh thng tin - i hc
Hng Hi s tng hp li cc bi tp gii c, bao gm cc bi tp trn trang Gii
bi trc tuyn: http://vn.spoj.pl/problems/oi/, cc bi thi Olympic cc nm trc v
mt s bi tp khc.
Cc bi n luyn s c phn vo cc phn khc nhau bao gm:
PHN I. S HC
PHN II. TH
PHN III. QUY HOCH NG
PHN IV. CC BI TON KHC
Ngn ng lp trnh c s dng trong cc bi ch yu l C/C++.
Trong qu trnh bin son s khng th trnh khi nhng sai st, i tuyn rt hoan
nghnh s ng gp t tt c cc bn. Mi kin phn hi xin gi v hm th:
olptin@vimaru.edu.vn hoc trungvdt49@gmail.com . Chn thnh cm n!
PHN I. S HC
BI 1. 3620. S phong ph - http://vn.spoj.pl/problems/NKABD/
Trong s hc, s phong ph l cc s m tng cc c s ca s (khng k chnh
n) ln hn s . V d, s 12 c tng cc c s (khng k 12) l 1 + 2 + 3 + 4 + 6 =
16 > 12. Do 12 l mt s phong ph.
Bn hy lp trnh m xem c bao nhiu s phong ph trong on [L,R].
D liu
Gm 2 s L, R (1 <= L <= R <= 10^5)
Kt qu
Gm 1 s nguyn duy nht l s s phong ph trong on [L, R].
Ch
C 50% s test c 1 <= L <= R <= 10^3
4
V d
D liu
1 50
Kt qu
9
Gii thch:
T 1 n 50 c 9 s phong ph l: 12, 18, 20, 24, 30, 36, 40, 42, 48
Time: 1s
Gii
Cch gii thng thng l duyt tng s nguyn t L n R, tnh tng cc c ca s
khng k chnh n v kim tra nu tng ln hn s th tng bin m ln 1.
lit k cc c v tnh tng tt c cc c ca mt s a khng k a ta ch vic kim
tra ln lt cc s t 1 cho n a/2, nu a chia ht thi in ra c v cng thm c vo
bin tng, on m nh sau:
int main()
{
int a;
int i;
int tong=0;
scanf("%d",&a);
for(i=1;i<=a/2;++i)
{
if(a%i==0)
{
printf("%d ",i);
tong += i;
}
}
printf("\n%d",tong);
system("pause");
return 0;
}
mt cht ta thy, khng nht thit phi duyt t 1 cho n a/2 m ch cn duyt
cc s i chy t 2 cho n cn bc 2 ca a l , nu a chia ht cho i th tong = tong + i
+ a/i (ch l nu a/i = cn bc 2 ca a th tong = tong + i). on m nh sau:
#include <stdio.h>
#include <math.h>
int main()
{
5
int a;
int i;
int tong=1;
scanf("%d",&a);
int cb2 = (int)sqrt(a);
printf("Cac uoc cua %d la:\n 1 ",a);
for(i=2;i<cb2;++i)
{
if(a%i==0)
{
printf("%d %d ",i,a/i);
tong += i+a/i;
}
}
if(a%cb2==0)
{
tong += cb2;
printf("%d ",cb2);
if(a != cb2*cb2)
{
tong+=a/cb2;
printf("%d",a/cb2);
}
}
printf("\nTong uoc cua %d = %d",a,tong);
//system("pause");
return 0;
}
6
return 0;
}
7
for(; j*i<=r; j++)
a[j*i] += i + j;
}
k=0;
for(i=l; i<=r; i++)
if(a[i] > i) k++;
printf("%d",k);
//system("pause");
return 0;
}
8
Gii
1. Cch gii thng thng:
Vit 1 hm kim tra s nguyn t. C nhiu cch kim tra s a c phi l s
nguyn t khng:
Th s nht l kim tra nu a c chia ht cho bt k mt s nguyn no trong
on [2,a/2] th n khng phi l s nguyn t.
Cch th hai vi nhn xt nu a l s nguyn t th n s khng chia ht cho bt
k s nguyn no trong on [2, sqrt(a)]
Cch th ba vi nhn xt nu a l s nguyn t th n s khng chia ht cho bt
k s nguyn t no trong on [2, sqrt(a)]
Cc cch trn bn c c th d dng ci t, tuy nhin vn cn mt s cch
khc nhanh hn nhng ta khng bn n y v ci t n cng khc phc
tp.
Tip theo ch vic xt cc s trong on [A,B], nu hm kim tra n ng l s
nguyn t th in ra.
Nhn xt: cch gii thng thng th kh nng qu thi gian l rt cao mc d time
cho ti 5s vi gii hn ca bi ny.
2. Dng sng nguyn t
Vic dng sng nguyn t s gip ta nhanh chng in ra cc s nguyn t trong mt
gii hn m b nh cho php ci t.
Sng thng thng l ta xt cc s i trong on [2,sqrt(B)], nu i l s nguyn t th
cc bi ca i khng phi l s nguyn t tc l i*j vi j trong on [i, B/i] khng
phi l s nguyn t. Cui cng ta ch cn duyt li mng nh du v in ra cc s
nguyn t. on m nh sau (time: 0.08s):
#include <stdio.h>
#include <math.h>
char a[200000];
void sang(int n)
{
int i,j,u;
int x = (int)sqrt(n);
a[0]=1;
a[1]=1;
for(i=2;i<=x;i++)
9
{
u=n/i+1;
if(a[i]==0)
{
for(j=i;j<u;++j)
{
if(a[j*i]==0)
a[j*i]=1;
}
}
}
}
int main()
{
int i,k,A,B;
scanf("%d%d",&A,&B);
sang(B);
for(i = A; i<=B; ++i)
{
if(a[i]==0)
printf("%d\n",i);
}
system("pause");
return 0;
}
10
}
}
int main()
{
int i,k,A,B;
scanf("%d%d",&A,&B);
if(A<=2)
{
A = 1;
printf("2\n");
}
else
A = A/2;
sang(B);
B = B/2 + B%2;
for(i = A; i<B; ++i)
{
if(a[i]==0)
printf("%d\n",i*2+1);
}
//system("pause");
return 0;
}
11
20 30
Kt qu
3
Time: 1s
Gii
gii bi ny trc tin ta phi vit 2 hm l hm o ngc 1 s nguyn v hm tm
c chung ln nht.
Hm o ngc s nguyn
Ta c th lm theo cch chuyn s nguyn v dng chui (dng hm sprintf()
hoc itoa() ) , o ngc chui v li chuyn chui v dng s nguyn (dng
hm atoi()). Cch ny bn c t ci t.
Cch th hai l chuyn s nguyn v mng cc ch s nguyn sau tnh li.
on m nh sau:
int daonguoc(int n)
{
int i,k=0,hs[5],m=0,cs=1;
while(n != 0)
{
hs[k++] = n%10;
n = n/10;
}
for(i = k-1; i>=0; i--)
{
m += hs[i]*cs;
cs *= 10;
}
return m;
}
Hm tm c chung ln nht
Ci t quy:
int ucln(int a, int b)
{
if (a==0 ||b==0) return a+b;
if(a==b) return a;
if(a>b) return ucln(a-b,a);
return ucln(a, b-a);
}
Hoc:
12
int ucln(int a, int b)
{
if (a==0 ||b==0) return a+b;
if(a%b==0) return b;
return ucln(b, a%b);
}
Ci t khng quy:
int ucln(int a, int b)
{
if (a==0 ||b==0)return a+b;
while (a !=b)
{
if(a>b)
a=a-b;
else
b=b-a;
}
return a;
}
13
}
printf("%d",d);
//system("pause");
return 0;
}
Tc gi: V nh Trung
Bi 4. 4141. Euler Totient Function - http://vn.spoj.pl/problems/ETF/
Trong s hc, hm -le ca mt s nguyn dng n c nh ngha l s lng cc
s nguyn dng nh hn hoc bng n v nguyn t cng nhau vi n.
Cho s nguyn dng n (1 <= n <= 10^6). Tnh gi tr ca hm -le.
Input
Dng u cha s nguyn T l s test (T <= 20000)
T dng tip theo, mi dng cha mt s nguyn n.
Output
T dng, mi dng ghi kt qu ca test tng ng.
Example
Input:
5
1
2
3
4
5
Output:
1
1
2
2
4
Time: 1s
Gii
Hm le c cng thc nh sau: f(n) = n.(1 - 1/p1).(1 - 1/p2). .. .(1 - 1/pk)
Vi p1, p2,.., pk l cc c nguyn t ca n.
14
Nh vy trc tin ta phi vit hm tm tt c cc c nguyn t ca n. Trong hm ny
ta s duyt t cc s i t 2 cho n cn bc hai ca n, nu n chia ht cho i th lu i vo
mng cc c ca n v lp n=n/i trong khi n vn chia ht cho i. Khi duyt xong nu
n>1 th n cng chnh l mt c ca s ban u. Bn c c th d dng ci t hm
ny.
Sau khi ci t xong hm tm tt c cc c nguyn t: factor(int n), cng vic cn li
rt n gin ch l duyt v m. Hm chnh nh sau (time = 0.79s):
int main()
{
int t,n;
int i,j;
int tam;
scanf("%d",&t);
for(i=0; i<t; ++i)
{
scanf("%d",&n);
factor(n);
tam=1;
for(j=0; j<k; ++j)
{
tam*=a[j]-1;
n/=a[j];
}
printf("%d\n",tam*n);
}
return 0;
}
Tc gi: V nh Trung
15
S duy nht la vi tri xut hin u tin cua s N trong day.
Sample
Input
Output
15
20
34
3
142
73
Time: 1s
Gii
Bi ny n gin ch l ghp chui s v tm v tr xut hin ca chui con. Mc tiu
cc bn luyn tp dng th vin string STL ca C++. Chng trnh nh sau (time:
0.57s):
#include<iostream>
#include<string>
using namespace std;
int main()
{
int n;
string s="";
char t[7];
cin>>n;
for(int i=1; i<=n; ++i)
{
sprintf(t,"%d",i);
s+=t;
}
sprintf(t,"%d",n);
cout<<s.find(t)+1;
//system("pause");
return 0;
}
Tc gi: V nh Trung
Bi 2. 3638. Word Counting - http://vn.spoj.pl/problems/WORDCNT/
Nguyn ang vit mt phn mm m t trong mt xu k t. Cu cm thy bun
chn sau khi vit xong phn mm rt nhanh. By gi, cu mun tm P l s lng ln
nht cc t c di bng nhau ng lin tip trong xu cho trc.
Cho mt xu ch cha cc k t t a n z v k t trng. Mi t l mt chui cc k
t lin tip khc k t trng v cc t phn tch nhau bi t nht mt k t trng.
Nhim v ca bn l vit chng trnh gip Nguyn tm s P ni trn.
16
D liu vo
D liu vo gm nhiu b d liu tng ng vi nhiu test. Dng u tin cha mt s
nguyn dng khng ln hn 20 l s lng cc b d liu. Cc dng tip theo cha
cc b d liu.
Trn mi dng tip theo cha xu k t c khng qu 1000 t tng ng vi mi b
d liu, mi t c khng qu 20 k t.
D liu ra
Vi mi b d liu, ghi ra trn mt dng s P m Nguyn mun tm.
V d
D liu vo
2
a aa bb cc def ghi
a a a a a bb bb bb bb c c
D liu ra
3
5
Time: 1s
Gii
Vi bi ny ta phi c c dng (chui c du cch) s dng hm cin.getline() ca C+
+ hoc hm gets() ca C.
Sau ta s duyt v m s k t ca tng t v lu vo mng m.
Cui cng ch vic duyt t u n cui mng m tm on con di nht c cc
phn t lin tip bng nhau.
on chng trnh nh sau (time: 0.00s ):
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char *s = new char[20002];
char *c = new char[20002];
short n;
cin>>n;
//bat buoc phai them doan cin.getline(s,20001); sau
vao de loai bo dong dau tien
17
cin.getline(s,20001);
for(int i=0; i<n; ++i)
{
memset(c,0,20001);
cin.getline(s,20001);
short k = 0, max = 0,v=0;
s[strlen(s)]=0;
for(int j=0; j<=strlen(s); ++j)
{
if(s[j] <='z' && s[j]>= 'a')
++k;
else
{
if(k!=0)
{
c[v++] = k;
k=0;
}
}
}
k = 1;
c[v++] = 0;
for(int j=1; j<v; ++j)
{
if(c[j] == c[j-1])
++k;
else
{
if(max < k) max = k;
k=1;
}
}
cout<<max<<endl;
}
return 0;
}
Tc gi: V nh Trung
Bi 3. Tp s - Chuyn tin 2011
Cho s n h c s 10, c khng qu 20 ch s v khng cha cc s 0 khng c
ngha u.
Bng cch xa mt hoc mt vi ch s lin tip ca n (nhng khng xa ht tt c
cc ch s ca n) ta nhn c nhng s mi. S mi c chun ha bng cch xa
cc ch s 0 v ngha nu c.
18
Tp s nguyn D c xy dng bng cch a vo n s n, cc s mi khc nhau
chun ha v khc n. V d, vi n = 1005 ta c th nhn c cc s mi nh sau:
Bng cch xa mt ch s ta c cc s: 5 (t 005), 105, 105, 100;
Bng cch xa hai ch s ta c cc s: 5 (t 05), 15, 10;
Bng cch xa 3 ch s ta c cc s: 5 v 1.
Tp D nhn c t n cha cc s {1005, 105, 100, 15, 10, 5, 1}. Trong tp D ny c
3 s chia ht cho 3, l cc s 1005, 105 v 15.
Yu cu: Cho s nguyn n. Hy xc nh s lng s chia ht cho 3 c mt trong tp
D c to thnh t n.
D liu: Vo t file vn bn NUMSET.INP gm mt dng cha s nguyn n.
Kt qu: a ra file vn bn NUMSET.OUT mt s nguyn s lng s chia ht
cho 3 tm c.
V d:
NUMSET.INP
NUMSET.OUT
1005
Time : 2s
Gii
Gii hn bi ny kh nh, c th gii quyt n gin bng cch s dng th vin STL
ca C++.
Ta c s n nh l c mt chui s nguyn (string). Vic ct b i cc ch s th ta s
s dng hm ct chui con substr() ca i tng string.
Tp D cha cc s i mt khc nhau, do ta s s dng cu trc set ca C++ (cu
trc ny c ti u lu tr cc gi tr khc nhau v c sp xp mc nh theo
th t tng dn).
Cui cng ta ch vic kim tra tng cc ch s ca tng chui s nguyn trong set nu
c chia ht cho 3 th tng bin m ln. Ci t nh sau (time : 0.01- 0.02s) :
#include<iostream>
#include<set>
#include<cstring>
using namespace std;
int main()
{
//freopen("NUMSET.INP","rt",stdin);
19
string n,s;
set<string> st;
cin>>n;
int len = n.length();
st.insert(n);
for(int i=1; i<len; ++i)
{
for(int j=0; j<= len-i; ++j)
{
s=n.substr(0,j) + n.substr(j+i);
while(s[0] == '0') s=s.substr(1);
st.insert(s);
}
}
set<string>::iterator it;
int tong;
int dem=0;
for(it=st.begin(); it!=st.end(); ++it)
{
tong=0;
for(int i=0; i<(*it).length(); ++i)
tong+=(*it)[i]-'0';
if(tong % 3 == 0) dem++;
}
//freopen("NUMSET.OUT","wt",stdout);
cout<<dem;
//system("pause");
return 0;
}
Tc gi: V nh Trung
PHN III. TH
Bi 1. 2722. Gm c - http://vn.spoj.pl/problems/VMUNCH/
Bessie rt yu bi c ca mnh v thch th chy v chung b vo gi vt sa bui
ti.
Bessie chia ng c ca mnh l 1 vng hnh ch nht thnh cc vung nh vi R
(1 <= R <= 100) hng v C (1 <= C <= 100) ct, ng thi nh du ch no l c v
ch no l . Bessie ng v tr R_b,C_b v mun n c theo cch ca mnh, tng
vung mt v tr v chung 1,1 ; bn cnh ng i ny phi l ngn nht.
Bessie c th i t 1 vung sang 4 vung khc k cnh.
20
Di y l mt bn v d [vi ('*'), c ('.'), chung b ('B'), v Bessie ('C')
hng 5, ct 6] v mt bn cho bit hnh trnh ti u ca Bessie, ng i c dnh
du bng ch m.
Bessie n c 9 c.
Cho bn , hy tnh xem c bao nhiu c m Bessie s n c trn con ng
ngn nht tr v chung (tt nhin trong chung khng c c u nn ng c tnh
nh)
D liu
Kt qu
V d
D liu
56
B...*.
..*...
.**.*.
..***.
*..*.C
Kt qu
9
Time: 1s
21
Gii
y l mt bi duyt theo chiu rng BFS thng thng nhanh chng tm ra ng
i ti u. Sau y ta s ci t thut ton ny bng C++ s dng hng i queue ca
STL v xy dng theo kiu class. Bn c cng c th t ci t bng C s dng mng
v struct.
T bt u Bessie ng ta s loang ra 4 bn cnh l trn, di, tri, phi nu
khng c , ri li loang tip, c nh vy cho n khi v n chung ta s ly
khong cch nh nht.
Ci t nh sau (time: 0.05s):
#include<iostream>
#include<queue>
#define maxN 100
using namespace std;
class node
{
public:
int x;
int y;
int d;
node(int x1, int y1, int d1):x(x1),y(y1),d(d1){}
};
bool a[maxN][maxN];
int main()
{
int m,n;
int xb,yb,xc,yc;
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
char c;
scanf("%d%d",&m,&n);
for(int i=0; i<m; ++i)
{
for(int j=0; j<n; ++j)
{
cin>>c;
if(c=='B')
{
xb=j;
yb=i;
a[i][j]=true;
}
else if(c=='C')
{
xc=j;
yc=i;
22
a[i][j]=false;
}
else if(c=='.')
a[i][j]=true;
else
a[i][j]=false;
}
}
queue<node> q;
node u(xc,yc,1);
q.push(u);
int x1,y1;
int min=10000;
while(!q.empty())
{
u=q.front();
q.pop();
if(u.x==xb && u.y==yb)
{
if(u.d<min) min=u.d;
}
else
{
for(int i=0; i<4; ++i)
{
x1 = u.x + dx[i];
y1 = u.y + dy[i];
if(x1>=0 && x1<n && y1>=0 && y1<m && a[y1]
[x1])
{
a[y1][x1]=false;
q.push(node(x1,y1,u.d+1));
}
}
}
}
printf("%d",min-1);
return 0;
}
Tc gi: V nh Trung
Bi 2. 2719. Bi c ngon nht - http://vn.spoj.pl/problems/VBGRASS/
Bessie d nh c ngy s nhai c xun v ngm nhn cnh xun trn cnh ng ca
nng dn John, cnh ng ny c chia thnh cc vung nh vi R (1 <= R <=
100) hng v C (1 <= C <= 100) ct. Bessie c g c th m c s khm c trn
cnh ng.
23
Mi khm c trn bn c nh du bng mt k t # hoc l 2 k t # nm k
nhau (trn ng cho th khng phi). Cho bn ca cnh ng, hy ni cho Bessie
bit c bao nhiu khm c trn cnh ng.
V d nh cnh ng di dy vi R=5 v C=6:
.#....
..#...
..#..#
...##.
.#....
Cnh ng ny c 5 khm c: mt khm hng u tin, mt khm to bi hng th 2
v th 3 ct th 2, mt khm l 1 k t nm ring r hng 3, mt khm to bi ct
th 4 v th 5 hng 4, v mt khm cui cng hng 5.
D liu
Kt qu
V d
D liu
56
.#....
..#...
..#..#
...##.
.#....
Kt qu
5
Time: 1s
Gii
Bi ny ta c th duyt theo chiu su DFS hoc chiu rng BFS. Ta s duyt m
s thnh phn lin thng ca th cng chnh l s lng khm c trn cnh ng.
Thut ton tng t bi Gm c. Ci t nh sau (time: 0.06s):
24
#include<iostream>
#include<queue>
#define maxN 101
using namespace std;
char a[maxN][maxN];
int main()
{
int r,c;
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
scanf("%d%d",&r,&c);
for(int i=0; i<r; ++i)
{
for(int j=0; j<c; ++j)
{
cin>>a[i][j];
}
}
queue< pair<int,int> > q;
pair<int,int> p;
int kq=0;
int x,y;
for(int i=0; i<r; ++i)
{
for(int j=0; j<c; ++j)
{
if(a[i][j]=='#')
{
a[i][j]='.';
kq++;
q.push(make_pair(i,j));
while(!q.empty())
{
p=q.front();
q.pop();
for(int k=0; k<4; ++k)
{
x=p.first+dx[k];
y=p.second+dy[k];
if(a[x][y]=='#')
{
a[x][y]='.';
q.push(make_pair(x,y));
}
}
}
}
}
}
cout<<kq;
return 0;
}
25
Tc gi: V nh Trung
Bi 3. 2721. Nc lnh - http://vn.spoj.pl/problems/VCOLDWAT/
Ma h oi Wisconsin khin cho l b phi i tm nc lm du i cn kht.
Cc ng ng dn nc ca nng dn John dn nc lnh vo 1 tp N (3 <= N <=
99999; N l) nhnh (nh s t 1..N) t mt ci bm t chung b.
Khi nc lnh chy qua cc ng, sc nng ma h s lm nc m ln. Bessie mun
tm ch c nc lnh nht c b c th tn hng ma h mt cch thoi mi nht.
Bessie v s ton b cc nhnh ng nc v nhn ra rng n l mt th dng
cy vi gc l chung b v cc im nt ng th c chnh xc 2 nhnh con i ra t
nt . Mt iu ngc nhin l cc nhnh ng ny u c di l 1.
Cho bn cc ng nc, hy cho bit khong cch t chung b ti tt c cc nt
ng v cc phn cui ng ng.
Phn cui ca mt ng ng, c th l i vo mt nt ng hoc l b bt, c gi
theo s th t ca ng ng. Bn c C (1 <= C <= N) nt ng, c m t bng 3
s nguyn: l phn cui ca ng E_i (1 <= E_i <= N) v 2 ng nhnh i ra t l
B1_i v B2_i (2 <= B1_i <= N; 2 <= B2_i <= N). ng ng s 1 ni vi chung b;
khong cch t phn cui ca ng ng ny ti chung b l 1.
D liu
Kt qu
Dng 1..N: Dng i cha 1 s nguyn l khong cch t chung ti phn cui
ca ng th i.
V d
D liu
52
354
123
26
Gii thch:
D liu trn m t bn ng nc sau:
Kt qu
1
2
2
3
3
Gii thch:
ng 1 lun cch chung 1 on l 1. ng 2 v 3 ni vi ng 1 nn khong cch s l
2. ng 4 v 5 ni vi ng 3 nn khong cch s l 3.
Time: 1s
Gii
y l bi ton duyt cy nh phn v tnh bc ca nt kh n gin. Trc tin ta s
xy dng cy, sau duyt cy t gc bc bng 1 v c th lan xung nt con tri v
nt con phi ng thi tng bc ln. Ci t nh sau (time: 0.44s):
#include <stdio.h>
#define MaxN 100000
typedef struct node
{
int k;
int l;
int r;
}node;
node T[MaxN];
void visit(int u, int k)
{
T[u].k = k;
if(T[u].l !=0 && T[u].r != 0)
{
visit(T[u].l, k+1);
visit(T[u].r, k+1);
}
}
27
int main()
{
int i,n,c;
int u,l,r;
scanf("%d%d",&n,&c);
for(i=0; i<c; ++i)
{
scanf("%d%d%d",&u,&l,&r);
T[u].l = l;
T[u].r = r;
}
visit(1,1);
for(i=1; i<=n; ++i)
printf("%d\n",T[i].k);
return 0;
}
Tc gi: V nh Trung
Bi 4. Hexgame - Chuyn tin 2011
28
Yu cu: Cho mt trng thi ca tr chi (nhn c sau mt dy bin i t trng
thi ban u), hy tnh s php bin i t nht a v trng thi ban u.
D liu: Vo t file vn bn HEXGAME.INP c dng:
Dng 1: cha 3 s ghi trn 3 ming ghp dng th nht ca li theo th t t
tri qua phi;
Dng 2: cha 4 s ghi trn 4 ming ghp dng th hai ca li theo th t t
tri qua phi;
Dng 3: cha 3 s ghi trn 3 ming ghp dng th ba ca li theo th t t
tri qua phi.
Kt qu: a ra file vn bn HEXGAME.OUT gm mt dng ghi mt s l s php
bin i t nht.
HEXGAME.INP
102
8603
754
HEXGAME.OUT
5
Ch s c
Ch s mi
0
1
8
3
1
2
1
0
Ch s c
Trng thi 1
2 3 4 5
3 8 0 0
3 7 0 2
2 7 4 1
Trng thi 2
2 3 4 5
6
4
4
6
7
7
6
8
8
6
0
5
9
5
5
9
29
Ch s mi
1
1
0
2
0
4
3
2
1
8
8
3
0
6
8
0
0
5
4
3
2
7
7
7
6
5
9
5
4
6
=
=
=
=
=
=
=
a[0];
a[4];
a[1];
a[3];
a[8];
a[5];
a[2];
30
b.a[7]
b.a[8]
b.a[9]
return
= a[7];
= a[9];
= a[6];
b;
}
//Kiem tra trang thai ban dau
bool isroot()
{
if(a[0]!=1 || a[1]!=2 || a[2]!=3 || a[3]!=8 ||
a[4]!=0 ||a[5]!=0 || a[6]!=4 || a[7]!=7 ||
a[8]!=6 || a[9]!=5)
return false;
return true;
}
};
int main()
{
queue< pair<node, int> > q;
node b;
b.input();
q.push(make_pair(b,0));
pair<node, int> u;
while(true)
{
u = q.front();
q.pop();
b=u.first;
if(b.isroot())
{
//freopen("HEXGAME","wt",stdout);
cout<<u.second;
break;
}
else
{
//Dua 2 trang thai moi vao hang doi
q.push(make_pair(b.left(),u.second+1));
q.push(make_pair(b.right(),u.second+1));
}
}
//system("pause");
return 0;
}
Tc gi: V nh Trung
31
hai chiu c th xy dng c gia hai trng im no . Mi tuyn ng c mt
thi gian hon thnh khc nhau.
Cc tuyn ng phi c xy dng sao cho N trng im lin thng vi nhau. Ni
cch khc, gia hai trng im bt k cn phi di chuyn c n nhau qua mt s
tuyn ng. B giao thng s chn ra mt s tuyn ng t trong danh sch ban u
a vo xy dng sao cho iu kin ny c tha mn.
Do nhn c u t rt ln t chnh ph, b giao thng s thu hn mt i thi cng
ring cho mi tuyn ng cn xy dng. Do , thi gian hon thnh ton b cc
tuyn ng cn xy dng s bng thi gian lu nht hon thnh mt tuyn ng no
.
Yu cu: Gip b giao thng tnh thi gian hon thnh cc tuyn ng sm nht tha
mn yu cu nu.
D liu
Dng cha s N v M (1 N 1000; 1 M 10000).
M tip theo, mi dng cha ba s nguyn u, v v t cho bit c th xy dng tuyn
ng ni gia trng im u v trng im v trong thi gian t. Khng c hai tuyn
ng no ni cng mt cp trng im.
Kt qu
Mt s nguyn duy nht l thi gian sm nht hon thnh cc tuyn ng tha mn
yu cu nu.
V d
D liu
57
122
151
251
143
132
532
344
Kt qu
3
32
Time: 1s
Gii
bi kh di nhng tm li mc tiu ca ta l phi tm ra 1 phng n xy
dng hon thnh trong thi gian ngn nht i qua tt c cc trng im, ngha l thi
gian lu nht hon thnh 1 tuyn ng no trong phng n phi l nh nht
trong tt c cc phng n xy dng c th. Ni cch khc chnh l tm cy khung nh
nht ca th, sau a ra trng s ln nht trn cy khung . Ta s p dng gii
thut PRIM nh sau.
2
3
1
1
1
2
5
1
5
2
4
4
4
33
#include <iostream>
#include <vector>
#include <queue>
#define MIN -2147483647
using namespace std;
int main()
{
int n,m;
int u, v, t;
cin>>n>>m;
//doan khai bao sau tuong duong voi mang 2 chieu
vector< vector< pair<int, int> > > dinh(n);
//mang danh dau cac dinh da xet
vector< bool > daxet(n);
pair<int, int> ts;
for(int i=0; i<m; ++i)
{
cin>>u>>v>>t;
ts = make_pair(v-1,t);
dinh[u-1].push_back(ts);
ts = make_pair(u-1,t);
dinh[v-1].push_back(ts);
}
//khoi tao bien dem so dinh da duyet u
u = 0;
//khoi tao bien t luu trong so lon nhat tren tuyen
duong di nho nhat
t = -MIN;
//khoi tao hang doi- duyet tu dinh 0
ts = make_pair(MIN,0);
priority_queue< pair<int, int> > q;
q.push(ts);
while(!q.empty())
{
ts = q.top();
q.pop();
v = ts.second;
if(!daxet[v])
{
//tang so dinh da duoc chon len
++u;
//luu lai gia trong so max
if(ts.first < t && ts.first!=MIN)
t = ts.first;
//da duyet xong thoat khoi vong lap
if(u == n) break;
//danh dau dinh da xet
daxet[v] = true;
//dua cac dinh ke voi dinh dang xet vao hang
doi
for(int i=0; i< dinh[v].size(); ++i)
if(!daxet[dinh[v][i].first])
34
q.push(make_pair(-dinh[v][i].second,
dinh[v][i].first));
}
}
cout<<-t;
return 0;
}
Ch :
gim thi gian cc bn hy th chuyn ton b cin, cout thnh scanf, v
printf (time: 0.22s).
Mt cch khai bo hng i khc mc nh sp xp theo chiu tng dn
l: priority_queue< int, vector< pair<int, int> >, greater< pair<int, int> > >
(mc nh l less< pair<int, int> >)
Tc gi: V nh Trung
Bi 6. 3125. n trng - http://vn.spoj.pl/problems/QBSCHOOL/
Ngy 27/11 ti l ngy t chc thi hc k I trng H BK. L sinh vin nm
th nht, Hiu khng mun v i mun m gp trc trc phng thi nn chun b
kh k cng. Ch cn li mt cng vic kh gay go l Hiu khng bit i ng no ti
trng l nhanh nht.
Thng ngy Hiu khng quan tm ti vn ny lm cho nn by gi Hiu
khng bit phi lm sao c . Bn thnh ph l gm c N nt giao thng v M con
ng ni cc nt giao thng ny. C 2 loi con ng l ng 1 chiu v ng 2
chiu. di ca mi con ng l mt s nguyn dng.
Nh Hiu nt giao thng 1 cn trng H BK nt giao thng N. V mt l
trnh ng i t nh Hiu ti trng c th gp nhiu yu t khc nh l gp nhiu
n , i qua cng trng xy dng, ... phi gim tc cho nn Hiu mun bit l
c tt c bao nhiu l trnh ngn nht i t nh ti trng. Bn hy lp trnh gip Hiu
gii quyt bi ton kh ny.
Input
Dng th nht ghi hai s nguyn N v M.
M dng tip theo, mi dng ghi 4 s nguyn dng K, U, V, L. Trong :
35
K = 1 c ngha l c ng i mt chiu t U n V vi di L.
K = 2 c ngha l c ng i hai chiu gia U v V vi di L.
Output
Ghi hai s l di ng i ngn nhn v s lng ng i ngn nht. Bit rng s
lng ng i ngn nht khng vt qu phm v int64 trong pascal hay long long
trong C++.
Example
Input:
32
1123
2231
Output:
41
Gii hn:
1 N 5000
1 M 20000
di cc con ng 32000
Time: 1s
Gii
y l bi thuc dng tm ng i ngn nht trn th c trng s khng m
nn ta s s dng thut ton Dijkstra, tuy nhin phi ci tin mt cht c th a ra
c s lng ng i ngn nht tm c nh sau:
Ta s gn nhn tm thi cho cc nh - nhn ca mi nh cho bit di
ng i ngn nht hin thi ti nh v s dng mt mng m s lng ng
i ngn nht ti mi nh.
Ti mi lt ta s ly ra nh c nhn nh nht trong hng i v tip tc ly
cho n khi c nh cha xt th gn nh thnh xt. Gi s nh ly ra l nh
u cha xt th lc ny gn u thnh xt v duyt qua cc nh k vi nh u, gi s v
k u cp nht li nhn cho nh ny nh sau
36
Nu nhn ca v > nhn ca u + trng s cnh (u,v) th gn li nhn ca v = nhn
ca u + trng s cnh (u,v) v s ng i ngn nht n v = s ng i ngn
nht n v. a nh v vo hng i.
Nu nhn ca v = nhn ca u + trng s cnh (u,v) th gn li nhn ca v = nhn
ca v + nhn ca u.
C nh vy cho n khi duyt ht nh cui cng th nhn ca nh cui cng - chnh
l nt giao thng th N. Kt qu ca bi ton chnh l nhn ti nh N v m ti nh
N. Ci t s dng priority_queue nh sau (time: 0.56s):
#include <iostream>
#include <vector>
#include <queue>
#include <list>
#define MaxN 5002
#define MAX 2147483647
using namespace std;
bool daxet[MaxN];
long long dem[MaxN];
int dist[MaxN];
list< pair<int,int> > dinh[MaxN];
pair<int,int> ts;
int main()
{
int n,m;
int k, u, v, d;
scanf("%d%d",&n,&m);
for(int i=0; i<m; ++i)
{
scanf("%d%d%d%d",&k,&u,&v,&d);
dinh[u].push_back(make_pair(d,v));
if(k==2)
dinh[v].push_back(make_pair(d,u));
}
for(int i=1;i<=n;++i)
dist[i] = MAX;
list<pair<int,int> >::iterator it;
priority_queue< pair<int,int>, vector< pair<int,int>
>, greater<pair<int,int> > > q;
q.push(make_pair(0,1));
dist[1] = 0;
dem[1] = 1;
while(!q.empty())
{
ts = q.top();
q.pop();
d = ts.first;
u = ts.second;
37
if(daxet[u]) continue;
daxet[u]= true;
for(it=dinh[u].begin(); it!=dinh[u].end(); ++it)
{
v = (*it).second;
k = (*it).first;
if(dist[v] > d + k)
{
dist[v] = d + k;
dem[v] = dem[u];
q.push(make_pair(dist[v],v));
}
else if(dist[v] == d + k)
dem[v]+= dem[u];
}
if(u==n)
{
printf("%d %lld",dist[n],dem[n]);
break;
}
}
return 0;
}
Tc gi: V nh Trung
38
3
1
2
3
Output:
1
2
3
Time: 1s
Gii
u tin ta xt hnh ch nht 2x1 th c 1 cch xp l xp 1 vin gch 2x1.
Xt hnh ch nht 2x2 th c 2 cch xp l xp 2 vin 1x2 hoc 2 vin 2x1.
Xt hnh ch nht 2xi c cc trng hp sau vi f(i) l s cch xp cho hnh ch nht
2xi.
2x(i-1)
2x1
f(i-1) cch xp
2x(i-2)
1x2
f(i-2) cch xp
1x2
39
k = b1[i] + b2[i] + nho;
kq[i] = k%cs;
nho = k/cs;
}
else if(i<n1)
{
k = b1[i] + nho;
kq[i] = k%cs;
nho = k/cs;
}
else if(i<n2)
{
k = b2[i] + nho;
kq[i] = k%cs;
nho = k/cs;
}
}
if(nho>0)
{
kq.push_back(nho);
}
return kq;
}
40
}
Tc gi: V nh Trung
Bi 2. 3883. Lt gch 3 - http://vn.spoj.pl/problems/M3TILE/
m s cach lat hinh ch nht 3xn bng cac domino 2x1?
SAMPLE INPUT
2
8
12
-1
SAMPLE OUTPUT
3
153
2131
Time: 1s
Ch : n=0 kt qu tr v l 1.
Gii
Bi ny th vi n l th s 1x1 l l trong khi cc con domio u c 2 , tng ca
chng lun lun chn, nn kt qu bi ton tr v l 0 c cch xp no ph hp. Do
ta ch xt vi n chn.
u tin xt hnh ch nht 3x2, d dng nhn thy c 3 cch xp sau :
41
Xt tip hnh ch nht 3x4, c cc trng hp sau:
3
x
2
3
x
2
42
for(i=6;i<=30;i+=2)
{
f[i]=4*f[i-2] - f[i-4];
}
scanf("%d",&n);
while(n!=-1)
{
printf("%d\n",f[n]);;
scanf("%d",&n);
}
return 0;
}
Tc gi: V nh Trung
Bi 3. 2795. Steps - http://vn.spoj.pl/problems/VSTEPS/
Bc thang
Bm chi tr chi in t Lucky Luke n mn phi iu khin Lucky leo ln mt cu
thang gm n bc.
Cc bc thang c nh s t 1 n n t di ln trn. Lucky c th i ln mt bc
thang, hoc nhy mt bc ln hai bc thang. Tuy nhin mt s bc thang b thng
do c k v Lucky khng th bc chn ln c. Bit ban u, Lucky ng bc
thang s 1 (bc thang s 1 khng bao gi b thng).
Chi n y, Bm cht ny ra cu hi: c bao nhiu cch Lucky leo ht c cu
thang? (ngha l leo n bc thang th n). Bm mun nh bn tr li cu hi ny.
D liu
Kt qa
In ra phn d ca s cch Lucky leo ht cu thang khi chia cho 14062008.
V d
D liu
42
23
43
Kt qa
0
D liu
90000 1
49000
Kt qa
4108266
Time: 1s
Gii
Bi ny c cng thc ging ca dy Fibonacy. Khi ta ng bc n-1 th ta c th i
ln 1 bc n bc n, cn khi ta ng bc n-2 th ta c th di chuyn ln 2 bc
n bc n. Tuy nhin ta phi xt n cc trng hp m bc thang b hng th khng
c cch no bc ln c, ch c th nhy 2 bc qua v nu 2 bc lin tip m
b hng th r rng l phi dng li. Ch l phi ly phn d khi chia s cch cho
14062008. Ci t nh sau (time: 0.07s):
#include<stdio.h>
#define sc 14062008
int main()
{
int i,n,k;
unsigned long long a[100001];
int tmp;
a[0] = 0;
a[1] = 1;
scanf("%d%d",&n,&k);
for(i=k-1; i>=0; --i)
{
scanf("%d", &tmp);
a[tmp] = -1;
}
for(i=2; i<=n; i++)
{
if(a[i] == -1)
{
//printf("-1\n");
continue;
}
if(a[i-1] == -1 && a[i-2] == -1)
{
a[n] = 0;
break;
}
44
else if(a[i-1] == -1)
a[i] = a[i-2];
else if(a[i-2] == -1)
a[i] = a[i-1];
else
a[i] = (a[i-1] + a[i-2]) % sc;
//printf("%ld\n",a[i]);
}
printf("%ld\n", a[n] % sc);
//system("pause");
return 0;
}
Tc gi: V nh Trung
Bi 4. 2782. ng i c tng ln nht - http://vn.spoj.pl/problems/QBMAX/
Cho mt bng A kch thc m x n (1 <= m, n <= 100), trn ghi cc s nguyn a ij (|
aij| <= 100). Mt ngi xut pht ti no ca ct 1, cn sang ct n (ti no cng
c).
Quy tc i: T (i, j) ch c quyn sang mt trong 3 (i, j + 1); (i - 1, j + 1); (i + 1,
j + 1)
Input
Dng 1: Ghi hai s m, n l s hng v s ct ca bng.
M dng tip theo, dng th i ghi n s trn hng i ca bng theo ng th t t tri
qua phi
Output
Gm 1 dng duy nht ghi tng ln nht tm c
Example
Input:
57
9 -2 6 2 1 3 4
0 -1 6 7 1 3 3
8 -2 8 2 5 3 2
1 -1 6 2 1 6 1
7 -2 6 2 1 3 7
Output:
41
45
Time: 1s
Gii
y l bi dng quy hoch ng trn bng. Quy tc ca bi ny c th thy r trong
bng bn di:
j\i
-2
-1
-2
-1
-2
INT_MI
N
INT_MI
N
INT_MI
N
INT_MI
N
INT_MI
N
INT_MI
N
INT_MI
N
INT_MI
N
14
16
24
27
35
14
23
24
31
34
16
18
28
31
36
13
18
19
34
35
13
15
19
22
41
INT_MI
N
INT_MI
N
INT_MI
N
INT_MI
N
INT_MI
N
INT_MI
N
INT_MI
N
INT_MI
N
46
int main()
{
int i,j,s;
scanf("%d%d",&m,&n);
for(i=0; i<m; ++i)
{
for(j=0; j<n; ++j)
scanf("%d",&a[i][j]);
}
for(i=0; i<=m; ++i)
b[i][0] = 0;
for(i=1; i<=n; ++i)
{
b[0][i] = INT_MIN;
b[m+1][i] = INT_MIN;
}
for(i=1; i<=n; ++i)
{
for(j=1; j<=m; ++j)
{
s = INT_MIN;
if(s < b[j][i-1]) s = b[j][i-1];
if(s < b[j-1][i-1]) s = b[j-1][i-1];
if(s < b[j+1][i-1]) s = b[j+1][i-1];
b[j][i] = a[j-1][i-1] + s;
}
}
/*for(i=0; i<=m+1; ++i)
{
printf("\n");
for(j=0; j<=n; ++j)
printf("%-13d", b[i][j]);
}*/
s = INT_MIN;
for(i=1; i<=m; ++i)
if(s < b[i][n])
s = b[i][n];
printf("%d",s);
return 0;
}
Tc gi: V nh Trung
47
S giao thng H Ni quyt nh bn u gi cc bin s xe p ly tin ng h
ng bo l lt min Trung. Mt bin s xe c gi l p nu n tha mn cc iu
kin sau:
L mt s nguyn dng T m A T B trong A, B l hai s nguyn
dng cho trc;
T l mt s nguyn t;
T l mt s i xng (c T t tri qua phi thu c kt qu ging nh c
T t phi qua tri). V d 12321 l mt s i xng.
Yu cu: Cho hai s nguyn dng A v B, hy tm s lng cc bin s xe p.
D liu: Vo t file vn bn AUCTION.INP gm 1 dng cha hai s nguyn dng A
v B(104A<B<105).
Kt qu: a ra file vn bn AUCTION.OUT mt s nguyn l s lng bin s xe
p tm c.
V d:
AUCTION.INP
11111 22222
AUCTION.OUT
23
Time : 2s
Gi gii
Bi ny trc tin ta s vit hm kim tra tnh i xng ca mt s c 5 ch s. Hm
ny ta c th chuyn s nguyn a thnh chui s s[6] (dng hm sprintf(s , %d, a) )
hoc s dng cc php ton chia v ly phn d tch cc ch s ca a, ri kim tra
nu ch s ti v tr 0 v 4 ging nhau v ch s ti v tr 1 v 3 ging nhau th tr v
true, ngc li tr v false.
Tip theo ta phi vit hm kim tra tnh nguyn t ca s nguyn a. n gin ch cn
kim tra nu a chia ht cho bt k s nguyn no trong on t 2 n cn bc hai ca a
th tr v false ngc li tr v true.
Cui cng ch cn duyt t A n B v m cc s tha mn i xng v l s nguyn
t.
48
Bn c t ci t.
Tc gi: V nh Trung
Bi 2. Trng xe - Chuyn tin 2010
Mt bi xe nhn trng xe trong vng mt thng. Mi xe s c gn mt s hiu l
mt snguyn dng T (10102010 T 10109999). Hai xe khc nhau s c gn
hai s hiu khc nhau.
Mt xe c th ra vo bi xe nhiu ln, mi ln vo bi xe, ngi trng xe s ghi
vo s sch s hiu ca chic xe .
Cui thng da vo s ghi chp, ngi trng xe lm thng k v s ln vo bi xe
ca tng chicxe tin hnh thu ph. Nu mt chic xe vo bi xe p ln, cui
thng ch xe phi tr mt lng ph C c tnh nh sau:
C = 100
nu p 5
C = 100 + ( 5) nu p > 5
Yu cu: Tnh tng s ph ngi trng xe thu c vo cui thng.
D liu: Vo t file vn bn PARK.INP c dng:
Dng u cha mt s nguyn dng K (0 < K 106)
K dng tip theo, mi dng cha s hiu mt chic xe .
Kt qu: a ra file vn bn PARK.OUT mt s nguyn l tng s ph thu c.
V d:
PARK.INP
7
10102010
10108888
10102010
10102010
10102010
10102010
10102010
Time : 2s
PARK.OUT
201
49
Gi gii
Ta thy gii hn ca bi ton = 10109999 - 10102010 + 1 = 7990 v k <10 6 nn hon
ton c th p dng vic m theo ch s.
Trc tin ta khai bo mt mng int dem[7991]. c cc u vo n tm maxn v
minn. Khi xt s hiu ca 1 chic xe no v d l n ta ch vic tng dem[n20102010] ln 1.
Cui cng duyt li mng dem[] t s hiu nh nht (minn) n cao nht (maxn)
tnh tng chi ph thu c.
Tc gi: V nh Trung
Bi 3. 3480. Cy nh phn tm kim - http://vn.spoj.pl/problems/NKTREE/
Mt trong nhng cu truc d liu ni ting lu tr d liu la cy nhi phn
tim kim. Mi nt trn cy c nhiu nht l hai nt con v nhiu nht l mt nt cha.
Cc nt con c chia thnh hai loi: nt con tri v nt con phi. Mi cy tm kim
c mt nt khng c nt cha gi l nt gc, v c t nht mt nt khng c nt con gi
l nt l.
Mi mt nt c gn mt gi tr no tha iu kin sau: Ti mt nt v bt k
tt ca cac gi tr thuc cy con trai vi gc v nho hn gi tr ti nt v, va tt ca cac gi
tr cc nt thuc cy con bn phai vi gc v ln hn gi tr ti nut v.
Hinh bn di m ta mt cy nhi phn tim kim trong nt c gi tr 5 l gc,
cc nut vi gi tr 2, 4 va 8 l cc nt l.
5
4
ng i trn cy la day cac gi tr ti cc nt lin tip, trong o mi nt sau la
nt con trc tip ca nt trc .
50
Yu cu: Cho mt day gm cc gi tr i mt khc nhau. Hy cho bit tn tai hay
khng cy tim kim nhi phn, m trn tn ti mt ng i vi dy gi tr tng
ng l dy cho.
Vi du, tn ti cy nh phn tm kim vi day 5 1 3 2, cn khng tn ti cy nh phn
tm kim vi dy 5 2 3 1.
D liu
Ln lt lit k cc gi tr ca dy cho. Hai phn t c ghi cch nhau bi khong
trng hoc du xung dng. S lng phn t ca dy khng vt qu 50 000 v mi
phn t ca dy c gi tr tuyt i khng vt qu 231.
Kt qu
Ghi ra t YES, nu tn ti cy, tng ng dy cho hoc t NO trong trng
hp ngc lai.
Vi du
D liu
D liu
5132
5231
Kt qu
YES
NO
Time: 1s
Gi gii
Vi bi ny chng ta cn quan tm n cc gi tr l gi tr min hin ti, max hin
ti, gi tr nt cha trc tip v gi tr nt con ang xt. C th thy r hn hnh di:
5
(min,max)
(min, 5)
51
Nu c=b hoc c<=Min hoc c>=Max th p n bi ton l NO dng c d
liu.
Nu c thuc khong (Min, Max) v c < b th gn li Max = b
Nu c thuc khong (Min, Max) v c > b th gn li Min = b
Cui cng nu tt c cc gi tr c c u tha mn th in ra YES.
Ch : c d liu bi ny l c cho n khi ht d liu nn trong C ta c th dng
vng lp while(scanf(%f, &c) >0){ } hoc trong C++ dng while((cin>>c)>0) { }.
y phi dng kiu float trong C hoc long long trong C++ cho cc bin v kh nng
b test ca bi ny b sa, c gi tr vt qu kiu s nguyn 32 bit.
Tc gi: V nh Trung
Bi 4. 2786. Cy khung nh nht (HEAP) - http://vn.spoj.pl/problems/QBMST/
Cho n th v hng lin thng G = (V, E) gm n nh v m cnh, cc nh c
nh s t 1 ti n v cc cnh c nh s t 1 ti m. Hy tm cy khung nh nht
ca th G
Input
Dng 1: Cha hai s n, m (1 <= n <= 10000; 1 <= m <= 15000)
M dng tip theo, dng th i c dng ba s nguyn u, v, c. Trong (u, v) l ch s hai
nh u mt ca cnh th i v c trng s ca cnh (1 <= u, v <= n; 0 <= c <=
10000).
Output
Gm 1 dng duy nht: Ghi trng s cy khung nh nht
Example
Input:
69
121
131
241
232
251
52
351
361
452
562
Output:
5
Time: 1s
Gi gii
Tng t bi NKCITY trong phn TH, ch c khc l kt qu tr v l tng
trng s ca cy khung nh nht.
Tc gi: V nh Trung
Bi 5. 4031. Mass of Molecule- http://vn.spoj.pl/problems/MMASS/
Hoa cht chi gm cac nguyn t C, H, O co trong lng 12,1, 16 tng ng.
No c biu din dang "nen", vi du COOHHH la CO2H3 hay CH (CO2H) (CO2H)
(CO2H) la CH(CO2H)3. Nu dang nen thi s ln lp >=2 va <=9.
Tinh khi lng hoa cht.
Input
Gm mt dong m ta hoa cht khng qua 100 ki t chi gm C, H, O, (, ), 2,..,9.
Output
Khi lng cua hoa cht, lun <=10000.
Sample
MASS.IN
MASS.OUT
COOH
CH(CO2H)3
((CH)2(OH2H)(C(H))O)3
45
148
222
Time: 1s
Gi gii
C ch gii bi ny ging vi kiu ngn xp - stack, vo sau ra trc.
u tin ta s c ton b xu: s, sau xt ln lt cc k t trong xu: s[i], c cc
trng hp sau:
53
Nu s[i] = ( th ta a vo stack gi tr 0
Nu s[i] [2,9] th ly gi tr cui stack ra nhn vi gi tr tng ng s[i] 0, ri ly kt qu a vo stack.
Nu s[i] {C, O, H] th a vo stack trng lngj ca nguyn t
Nu s[i] = ) th ta ly ln lt cc gi tr cui stack ra ng thi tnh tng
ca cc gi tr ny cho n khi ly ra gi tr 0, ri li a vo stack tng va tm
c.
Duyt xong ta s tnh tng cc gi tr cn li trong stack => khi lng ca ha cht.
Minh ha vi v d s 2 trn:
s[i]
C
H
(
C
O
2
H
)
3
Stack
{12}
{12, 1}
{12, 1, 0}
{12, 1, 0, 12}
{12, 1, 0, 12, 16}
{12, 1, 0, 12, 32}
{12, 1, 0, 12, 32, 1}
{12, 1, 45}
{12, 1, 135} = 148
Tc gi: V nh Trung