You are on page 1of 44

, -, ` - - ...

1

1f^f 1Af T Xt If 1ff A 1tIf 1A1 f^
1ff tff 1f ft1 X 1tA fft1


1. C 2005 : D tr nc Code : hienclubvn ; vietduc ; AlexBlack
2. C 2005 : a o Code : hienclubvn ; vietduc; AlexBlack; Sounj
3. KC2005 : Tm c trng nh Code: hienclubvn; vietduc; AlexBlack
4. KC2005: Thm him Code: AlexBlack

5. KC2006: Radar Code: hienclubvn; panaturo; AlexBlack
6. C2006: Siu m Code: vietduc
7. Tp th KC: Tnh im Code: vietduc ; hienclubvn
8. Tp th KC: Phn phng Code: hienclubvn ; vietduc

9. KC2008 : Dy s Code: hienclubvn

10. KC2009 : o to t xa Code: vietduc
11. KC2009 : Dy s Code: Sounj ; hunterphu
12. KC2009: Kt bn Code: hienclubvn; Vibzz90
13. KC2009: Hiu chnh nh n sc Code: hienclubvn





Bi : D tr nc (Cao ng 2005)
min Trung thng nm no cng c nhng t hn hn nn ng Nam c nhng thng
d tr nc. Do mua lm nhiu t nn N (1 N 1000) thng cha nc ca ng Nam c kch
thc khc nhau, mi thng c sc cha Ci (1 Ci 10000, 1 i N). D on rng nm nay
s c t hn hn ln nn ng Nam mun y nc ht cc thng d tr. Sau khi kim tra
ng Nam thy rng c mt s thng vn cn y, mt s khc th vi i mt phn, cn mt s th
ht. ng quyt nh cc thng no cha y th s ch i y nc. Nhng do ni ly
nc rt xa, v mi ln ch ch i c 1 thng nn ng quyt nh s san nc gia cc thng
vi nhau s thng phi ch i l t nht
Yu cu:
Cho dung lng nc hin c ca thng th i l Bi (0 Bi Ci, 1 i N), hy gip ng Nam
xc nh s lng thng t nht phi mang i.
D liu: vo t file vn bn WATER.INP c dng sau:
Dng th nht ghi mt s t nhin N l s lng cc thng nc.
Dng th i trong N dng tip theo mi dng c 2 s nguyn Bi v Ci (0 Bi Ci) m t thng
tin thng th i, vi Bi l nc cn trong thng v Ci l sc
cha ca thng, cc s cch nhau t nht mt khong trng.
Kt qu: ghi ra file vn bn WATER.OUT cha mt s l s lng t nht cc
thng nc tm c.
Kt qu: ghi ra file vn bn WATER.OUT cha mt s l s lng t nht cc
thng nc tm c.
, -, ` - - ...

2

V du:
WATER.INP
4
0 1
4 5
0 2
1 2

WATER.OUT
1

- tng : Bi ny i tm s thng cha y (hoc ht), em i
Vy s thng mang i l nh nht th phi u tin mang ci ln trc
Gii thut: sp xp th t tng dn
Ly tng lng nc y cc thng theo th t t nh ln ln, cho n khi ht. Kim
tra xem thng no cha y th vc i


// Code ca @hienclubvn
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define input "WATER.INP"
#define output "WATER.OUT"
void Swap(int &a,int &b)
{
a^=b^=a^b;
}
void Sort(int a[],int n)
{
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if (a[i]<a[j]) Swap(a[i],a[j]);
}
int main ()
{
FILE *f,*f1;
int N,i=0,Sum=0,*Arr,temp;
f=fopen(input,"rt");
fscanf(f,"%d\n",&N);
Arr=(int*)malloc(N*sizeof(int));
while(!feof(f))
{
fscanf(f,"%d ",&temp);
fscanf(f,"%d\n",&Arr[i++]);
Sum+=temp;
}
// Sap xep lai
Sort(Arr,N);
// thuc hien do day nuoc
i=0;
while(Sum&&i<N)
{
Sum-=Arr[i++];
, -, ` - - ...

3

if (Sum<0) temp=N-i-1;
}
f1=fopen(output,"wt");
fprintf(f1,"%d",temp);
getch();
}


// Code ca @vietduc
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
ifstream infile("water.txt");
int water=0,n,*c,i,j;
infile >> n;
c=new int[n];
for ( i=0; i<n; i++)
{
int a;
infile >> a >> c[i];
water+=a;
}
for (i=0; i<n-1; i++)
for (j=i; j<n; j++)
if (c[i]>c[j])
{
c[i]+=c[j];
c[j]=c[i]-c[j];
c[i]-=c[j];
}
i=0;
while (water>=c[i])
water-=c[i++];
cout << n-i;
return 0;
}


// code ca @AlexBlack
#include<stdio.h>
#define input "water.txt"
#define MAX 100
typedef struct thung
{
int dungtich;
int luongnuoc;
};

int Nhap(thung th[],int &n)
{
FILE *f=fopen(input,"rt");
if(f==NULL)
return 0;
thung t1;
, -, ` - - ...

4

fscanf(f,"%d",&n);
for(int i=0;i<n;i++)
{
fscanf(f,"%d",&t1.luongnuoc);
fscanf(f,"%d",&t1.dungtich);
th[i]=t1;
}
fclose(f);
return 1;
}

void Sort(thung th[],int n)
{
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(th[i].dungtich>th[j].dungtich)
{
thung t1=th[i];
th[i]=th[j];
th[j]=t1;
}
}
}
}

void DoNuoc(thung th[],int n)
{
int j=0;
for(int i=n-1;i>-1;i--)
{
if(th[i].luongnuoc!=0)
{
while(j<i)
{
if(th[j].luongnuoc!=th[j].dungtich)
{
if((th[i].luongnuoc+th[j].luongnuoc)<=th[j].dungtich)
{
th[j].luongnuoc+=th[i].luongnuoc;
th[i].luongnuoc=0;
j++;
break;
}
else
{
int k=th[j].dungtich-th[j].luongnuoc;
th[j].luongnuoc=th[j].dungtich;
th[i].luongnuoc-=k;
}
}
j++;
}
}
}
}

, -, ` - - ...

5

void in(thung th[],int n)
{
for(int i=0;i<n;i++)
{
printf("%d %d\n",th[i].luongnuoc,th[i].dungtich);
}
}

void inthung(thung th[],int n)
{
for(int i=n-1;i>-1;i--)
{
if(th[i].dungtich>th[i].luongnuoc)
{
printf("%d %d\n",th[i].luongnuoc,th[i].dungtich);
}
else
break;
}
}

int main()
{
thung th[MAX];
int n;
if(Nhap(th,n)==0)
{
printf("loi doc file");
return 0;
}

Sort(th,n);
//in(th,n);
DoNuoc(th,n);
inthung(th,n);
//in(th,n);
return 0;
}




BI :A O (Cao ng 2005)
Trong cc cuc khng chin chng xm lc, cha ng ta xy dng cc a o rt
ln di lng t vi cc tuyn ng giao thng ngm chng cht, va bo m an ton, va
gi b mt tuyt i. Trong a o ny giao thng i li phi tun th cc qui nh cht ch, tt
c mi ngi u phi di chuyn dc theo cc tuyn ng v thc hin nghim ngt cc ch dn
giao thng trn ng.
Mt trong cc a o nh vy bao gm N ng dc v M ng ngang c m t nh mt
li vung kch thc N x M. Cc ng ngang nh s t 0 n M-1 t di ln trn, cc
ng dc nh s t 0 n N-1 t tri sang phi. Ti mt s v tr giao gia cc ng ngi ta
t cc bin ch dn dng vung hoc trn vi ngha nh sau: khi di chuyn theo cc ng
ti cc nt giao thng, nu gp ch dn vung th bt buc r tri, nu gp ch dn trn th bt
buc r phi, cn nu khng c ch dn th phi i thng. S sau cho ta mt hnh nh cc
, -, ` - - ...

6

ng ca a o v cc ch dn.
Bn c nhim v dn mt on khch tham quan i theo cc ng ca a o, xut pht t v
tr (0,0) v tun th ch dn ti cc nt giao thng. T v tr ban u bn c th i theo mt
trong hai hng (ngang hoc dc). ng i ca bn s dng li nu xy ra mt trong hai tnh
hung sau:
1. Khng th i tip c na.
2. Nt giao thng sp n theo hnh trnh l nt giao thng i qua.
di ca on ng i l tng s cc nt giao thng i qua k c v tr xut
pht v v tr kt thc.


Yu cu: tnh di ca on ng c th i c trong a o.
D liu: vo t file vn bn PIPE.INP c dng sau:
Dng u tin cha 3 s t nhin l N, M v K vi N, M l kch thc ca
li m t a o. N, M < 100. K l s lng cc ch dn c ti cc nt giao
thng trong a o. K < 1000. Cc s cch nhau bi du cch.
K dng tip theo m t ta v tnh cht ca cc ch dn ti cc nt giao
thng tng ng. Mi dng bao gm 3 s nguyn dng X Y Z. y X, Y l
to ca v tr bin ch dn (0 X N-1, 0 Y M-1), Z nhn gi tr 0
hoc 1 vi ngha: 0 l ch dn r phi v 1 l ch dn r tri. Cc s cch
nhau bi du cch.
Kt qu: ghi ra file vn bn PIPE.OUT bao gm mt dng cha ng 2 s t nhin
theo th t tng dn l di ca hai ng i trong a o xut pht t v tr ban
u.
V d:
PIPE.INP
8 6 14
0 4 0
1 4 1
1 5 0
2 0 1
2 1 0
2 2 1
3 2 1
3 5 0
4 4 1
5 1 1
, -, ` - - ...

7

5 5 0
6 0 1
6 4 0
7 2 1

PIPE.OUT
13 19


// Code ca @hienclubvn
// tng : duyt
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#define Input "PIPE.INP"
#define Output "PIPE.OUT"
#define MAX 100
int A[MAX][MAX],B[MAX][MAX];
int x1=0,y1=0,x,y;
int count=1;
void Init(int n,int m)
{
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
A[i][j]=2;
}
void Init_1(int n,int m)
{
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if(i==0&&j==0)B[i][j]=1;
else B[i][j]=0;

}
void nhap(int &n,int &m)
{
FILE *f=fopen(Input,"r");
int k;
fscanf(f,"%d",&n);
fscanf(f,"%d",&m);
fscanf(f,"%d",&k);
Init(n,m); // Creat Arr A
int temp1,temp2,temp3;
for(int i=0;i<k;i++)
{
fscanf(f,"%d",&temp1);
fscanf(f,"%d",&temp2);
fscanf(f,"%d",&temp3);
A[temp1][temp2]=temp3;
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
printf("%d ",A[j][i]);
printf("\n");
}
, -, ` - - ...

8

fclose(f);
}
void dithang(int &x,int &y)
{
if(y==y1+1) {x1=x;y1=y;y+=1;return;}
if(y==y1-1) {x1=x;y1=y;y-=1;return;}
if(x==x1+1) {x1=x;y1=y;x+=1;return;}
if(x==x1-1) {x1=x;y1=y;x-=1;return;}
}
void queo_phai(int &x,int &y)
{
if(y==y1+1) {x1=x;y1=y;x+=1;return;}
if(y==y1-1) {x1=x;y1=y;x-=1;return;}
if(x==x1+1) {x1=x;y1=y;y-=1;return;}
if(x==x1-1) {x1=x;y1=y;y+=1;return;}
}
void queo_trai(int &x,int &y)
{
if(y==y1+1) {x1=x;y1=y;x-=1;return;}
if(y==y1-1) {x1=x;y1=y;x+=1;return;}
if(x==x1+1) {x1=x;y1=y;y+=1;return;}
if(x==x1-1) {x1=x;y1=y;y-=1;return;}
}
void Process(int n,int m)
{
while(x<n&&y<m&&B[x][y]==0)
{
switch(A[x][y])
{
case 2: B[x][y]=1;dithang(x,y); count++;break;
case 1: B[x][y]=1;queo_trai(x,y);count++;break;
case 0: B[x][y]=1;queo_phai(x,y);count++;break;
}
}
}
void Print(int n,int m)
{
printf("\n");
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++) printf("%d ",B[j][i]);
printf("\n");
}
}
int main()
{
int m,n;
nhap(n,m);
// --------- duong di thu 1:
Init_1(n,m);
x=0;y=1;
Process(n,m);
Print(n,m);
printf("%d\n\n",count);
// ---------- duong di thu 2:
Init_1(n,m);
x=1;y=0;
x1=0;y1=0;
, -, ` - - ...

9

count=1;
Process(n,m);
Print(n,m);
printf("%d\n",count);
getch();
}


// Code ca @vietduc
#include<iostream>
#include <fstream>
using namespace std;
struct node
{
int value;
bool ed;
};
node **pipe;

int timduong(int h, int i=1, int j=1)
{
cout << i << " "<<j<<endl;
if (pipe[i][j].ed==false)
return 0;
else if (pipe[i][j].value==3)
return -1;
else if (pipe[i][j].value==1)
{
h+=1;
if (h>3) h-=4;
pipe[i][j].ed=false;
}
else if(pipe[i][j].value==2)
{
h-=1;
if (h<0) h+=4;
pipe[i][j].ed=false;
}
if (h==0)
i++;
else if (h==1)
j++;
else if (h==2)
i--;
else if (h==3)
j--;
int y = 1+timduong(h,i,j);
pipe[i][j].ed=true;
return y;
}


int main()
{
ifstream infile("pipe.txt");
int m,n,k,i,j;
infile >>n >>m >>k;
pipe=new node*[m+2];
, -, ` - - ...

10

for (i=0; i<m+2; i++)
{
pipe[i]=new node[n+2];
for (j=0; j<n+2; j++)
{
if (i==0 || i== m+1 || j==0 || j== n+1)
pipe[i][j].value=3;
else pipe[i][j].value=0;
pipe[i][j].ed=true;
}
}
for (i=0; i<k; i++)
{
int a, b, c;
infile >> a >> b >> c;
pipe[b+1][a+1].value=c+1;
}
int a=timduong(0);
int b=timduong(1);
cout << a <<" "<< b << endl;
return 0;
}


// Code ca @Sounj
#include <fstream>
#include <iostream>
#include <conio.h>
using namespace std;
#define MAX_SIZE 100

struct ban_do
{
int N, M;
int D[MAX_SIZE][MAX_SIZE];
};

bool nhap(char* ten_file, ban_do& bd)
{
ifstream f(ten_file);
if(!f) return false;

int K, i, j, x, y;
f>>bd.N>>bd.M>>K;
for(i=0; i<bd.N; i++)
for(j=0; j<bd.M; j++)
bd.D[i][j] = 1;

for(i=0; i<K; i++)
{
f>>x>>y>>j;
bd.D[x][y] = j+2;
}

return true;
}

int dinh_huong(int huong, int chi_thi)
, -, ` - - ...

11

{
switch(chi_thi)
{
case 2: // re phai
huong -= 1;
if(huong<0) huong = 3;
break;
case 3: // trai
huong += 1;
if(huong>3) huong = 0;
break;
}
return huong;
}

int di_qua_dia_dao(int x, int y, int huong, ban_do& bd)
{
const int const lech[4][2]={{1,0},{0,1},{-1,0},{0,-1}};

int kq=0;
while(0<=x && x<bd.N && 0<=y && y<bd.M && bd.D[x][y]>0)
{
huong = dinh_huong(huong, bd.D[x][y]);
++kq;
bd.D[x][y] = -bd.D[x][y]; // da di qua
// doi huong
x += lech[huong][0];
y += lech[huong][1];
}

return kq;
}

void reset_bando(ban_do& bd)
{
int i,j;
for(i=0; i<bd.N; i++)
for(j=0; j<bd.M; j++)
if(bd.D[i][j] < 0)
bd.D[i][j] = -bd.D[i][j];
}

bool Xuat(char* ten_file, int kq1, int kq2)
{
ofstream f(ten_file);
if(!f) return false;

int tg;
if(kq1>kq2)
{
tg = kq1; kq1 = kq2; kq2 = tg;
}
f<<kq1<<" "<<kq2;

return true;
}

void main()
, -, ` - - ...

12

{
ban_do bd;
if(nhap("PIPE.INP", bd))
{
int kq1, kq2;
kq1 = di_qua_dia_dao(0, 0, 1, bd);
reset_bando(bd);
kq2 = di_qua_dia_dao(0, 0, 0, bd);
Xuat("PIPE.OUT", kq1, kq2);
cout<<"xong ... ";
}else cout<<"Xay ra loi khi doc du lieu tu file !";
getch();
}


// Code ca @AlexBlack
#include<stdio.h>
void Init(int **&A,int m,int n)
{
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
A[i][j]=2;
}

void Init(int *A,int n)
{
for(int i=0;i<n;i++)
A[i]=0;
}
void nhap(int **&A,int &m,int &n)
{
FILE *f=fopen("input.txt","rt");
fscanf(f,"%d",&n);
fscanf(f,"%d",&m);

A=new int*[m];
for(int i=0;i<m;i++)
A[i]=new int[n];
Init(A,m,n);
int temp1,temp2,temp3;
fscanf(f,"%d",&temp1);
while(!feof(f))
{
fscanf(f,"%d",&temp1);
fscanf(f,"%d",&temp2);
fscanf(f,"%d",&temp3);
A[temp2][temp1]=temp3;
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
printf("%d ",A[i][j]);
printf("\n");
}
fclose(f);
}

, -, ` - - ...

13

int run(int **A,int m,int n,int i,int j,int exi,int exj,int *B)
{
int vt=1;
while(true)
{
if(i>-1&&i<m&&j>-1&&j<n)
{
if(B[i*n+j]==1)
{
vt--;
break;
}
if(A[i][j]==0)//r phi
{
if(j==exj)//qu kh i t di ln trn hoc t trn xg di
{
if(i>exi)//i t di ln trn
{
exi=i;
j++;
}
else//i t trn xun di
{
exi=i;
j--;
}
}
else//qu kh i t tri sang phi hoc t phi sang tri
{
if(j>exj)//i t tri sang phi
{
exj=j;
i--;
}
else//i t phi sang tri
{
exj=j;
i++;
}
}
vt++;
}
else
if(A[i][j]==1)//r tri
{
if(j==exj)//qu kh i t di ln trn hoc t trn xg di
{
if(i>exi)//i t di ln
{
exi=i;
j--;
}
else//i t trn xung di
{
exi=i;
j++;
}
}
, -, ` - - ...

14

else//qu kh i t tri sang phi hoc t phi sang tri
{
if(j>exj)//i t tri sang phi
{
exj=j;
i++;
}
else//i t phi sang tri
{
exj=j;
i++;
}
}
vt++;
}
else//i thng
{
if(j==exj)//qu kh i t di ln trn hoc t trn xg di
{

if(i>exi)//i t di ln
{exi=i;
i++;
}
else//i t trn xung
{
exi=i;
i--;
}
}
else//qu kh i t tri sang phi hoc t phi sang tri
{

if(j>exj)//i t tri sang phi
{exj=j;
j++;
}
else//i t phi sang tri
{exj=j;
j--;
}
}
vt++;
}
B[exi*n+exj]=1;
}
else
break;
}
return vt;
}

void duongdi(int **A,int m,int n)
{
int *B;
int sovitri;
B=new int[n*m];
Init(B,n*m);
, -, ` - - ...

15

sovitri=run(A,m,n,1,0,0,0,B);
printf("theo chieu doc: %d\n",sovitri);
Init(B,n*m);
sovitri=run(A,m,n,0,1,0,0,B);
printf("theo chieu ngang: %d",sovitri);
}

int main()
{
int **A;
int m,n;

nhap(A,m,n);
duongdi(A,m,n);
return 0;
}




Bi: Tm c trng nh (Ko chuyn 2005)

Mt nhm nghin cu x l nh ca trng H Khoa hc t nhin, HQG Tp.HCM
ang gii quyt bi ton nhn dng mt ngi trong nh. nh chp mt ngi sau khi x l l
mt bng vung A kch thc N x N (10 N 800) vi mi (I,J) (1 I, J N) c gi tr t 0
n 255 l mc xm ca nh ti ny (trong 0 l mu nn). xc nh v tr c th l mt
ngi, nhm cn thng k cc c trng c dng hnh vung kch thc K x K (1 K 40)
trong tt cc cc gi tr trong hnh vung u phi khc 0.
Yu cu : T mt nh chp mt ngi, hy gip nhm nghin cu m tt c cc c trng
c trong nh .
D liu : Vo t file vn bn FEATURE.INP trong :
Dng u cha hai s N v K
Dng th I trong N dng tip theo cha tng ng dng th I ca bng A.
Cc s ghi trn mt dng c ghi cch nhau bi t nht mt khong trng. Mi dng c N s
nguyn. Dng th I l cc gi tr ca N phn t trong dng th I-1 trong bng vung A
Kt qu : Ghi ra file vn bn FEATURE.OUT s lng c trng tm c.

V d:

FEATURE.INP
6 2
0 12 15 0 33 30
17 19 23 15 16 0
11 12 0 14 14 0
0 10 11 8 10 0
0 8 7 12 0 0
0 0 11 13 0 0

FEATURE.OUT
7
, -, ` - - ...

16




/* Code ca @AlexBlack
tng: duyt ton b ma trn, kim tra nhng vng c din
tch KxK xem c phi l mt ngi hay khng. nu phi th
tn bin m ln.
*/
#include<stdio.h>
#define input "FEATURE.INP"
typedef struct Anh
{
int n;
int k;
int **Array;
};

void Init(Anh &a)
{
for(int i=0;i<a.n;i++)
for(int j=0;j<a.n;j++)
a.Array[i][j]=0;
}
int Nhap(Anh &a)
{
FILE *f=fopen(input,"rt");
if(f==NULL)
return 0;
fscanf(f,"%d",&a.n);
fscanf(f,"%d",&a.k);
a.n;
a.Array=new int*[a.n];
for(int i=0;i<a.n;i++)
{
a.Array[i]=new int[a.n];
}
//Init(a);
for(int i=0;i<a.n;i++)
for(int j=0;j<a.n;j++)
{
fscanf(f,"%d",&a.Array[i][j]);
}
fclose(f);
return 1;
}
int KtMatNguoi(Anh a,int p,int q)
{
for(int i=p;i<p+a.k;i++)
for(int j=q;j<q+a.k;j++)
{
if(a.Array[i][j]==0)
return 0;
}
return 1;
}
int SoMatNguoi(Anh a)
{
, -, ` - - ...

17

int sum=0;
for(int i=0;i<a.n-a.k+1;i++)
for(int j=0;j<a.n-a.k+1;j++)
{
if(KtMatNguoi(a,i,j))
sum++;
}
return sum;
}

//hy vng nh cp pht
void Detroy(Anh &r)
{
for(int i=0;i<r.n;i++)
delete []r.Array[i];
delete []r.Array;
}

int main()
{
Anh a;
if(!Nhap(a))
{
printf("Khong mo duoc file.");
return 0;
}
printf("So mat nguoi trong anh: %d",SoMatNguoi(a));
Detroy(a);
return 0;
}


/* Code ca @hienclubvn
gi tr nh t : 0-->255
kim tra KxK (cac gia tri !=0) la OK
*/
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define IN "FEATURE.INP"
#define OUT "FEATURE.OUT"
int **A,n,k,count=0;
FILE *fin,*fout;
void Read()
{
fin=fopen(IN,"r");
fscanf(fin,"%d %d",&n,&k);
// cap phat bo nho dong
A=(int**)malloc(n*sizeof(int));
for(int i=0;i<n;i++)
{
A[i]=(int*)malloc(n*sizeof(int));
//Load File
for(int j=0;j<n;j++) fscanf(fin,"%d",&A[i][j]);
}
fclose(fin);//Close File
}
, -, ` - - ...

18

int Check(int p,int q)
{
int i,j;
for(i=0;i<k;i++)
for(j=0;j<k;j++)
if (A[p+i][q+j]==0) return 0;
return 1;
}
int Process()
{
int i,j;
for(i=0;i<=n-k;i++)//dong
for(j=0;j<=n-k;j++)//cot
if(Check(i,j)) count++;
}
void Write()
{
fout=fopen(OUT,"w");
fprintf(fin,"%d",count);
fclose(fout);
}
int main()
{
Read();
Process();
Write();
return 0;
}


/* Code ca @vietduc
dch tng mt ri check xem n c tha mn hay khng,
nu c th ++
*/
#include<iostream>
#include<fstream>
using namespace std;
bool check(int **s, int k, int m, int n)
{
for (int i=0; i<k; i++)
for (int j=0; j<k; j++)
if (!s[m+i][n+j])
return false;
return true;
}

int main()
{
int n, k, **s, i, j, t=0;
ifstream infile("feature.txt");
infile >>n >> k;
s=new int*[n];
for (i=0; i<n; i++)
{
s[i]=new int[n];
for (j=0; j<n; j++)
, -, ` - - ...

19

infile >> s[i][j];
}
for (i=0; i<=n-k; i++)
for (j=0; j<n-k; j++)
if (check(s,k,i,j))
t++;
cout << t;
return 0;
}




Bi: Thm him ( Khi Ko Chuyn 2005)

on thm him Nam cc xut pht t Trm nghin cu t im c to (0, 0). Trc
OX chy t ty sang ng, trc OY chy t nam ln bc. Ban u on i theo mt trong s 4
hng ng (E), Ty (W), Nam (S) hoc Bc (N). Sau khi i mt qung ng l mt n v
di on dng li thc hin cc o c kho st cn thit v tu theo tnh hnh thc t,trng
on s quyt nh i tip theo hng no. nh du cc im trn bn khai thc v d
dng xc nh ng tr v lch trnh di chuyn trong nht k c ghi di dng xu cc k t
trong tp {E, W, S, N}. Tuy vy thi tit a cc ni ting l ng nh. Bo tuyt c th ni
ln bt k lc no km theo cc cn bo t lm ri lon la bn. Khi ng i s c ghi
nhn bng cc k t L - R tri, R - R phi, B i ngc li hng va i hoc C - Tip tc
i thng theo hng c. Mi khi bo t chm dt, la bn hot ng bnh thng tr li lch
trnh di chuyn li c ghi nhn bng cc k t E, W, S, N. thi im ban u ca cuc thm
him thi tit tt, khng c bo t. Trong sut cuc hnh trnh c th khng c trn bo t no
hoc bo t c th xy ra nhiu ln. V d, lch trnh hnh bn c th c ghi nhn bng xu
WRECSSCRWWCRN


Yu cu: Cho mt lch trnh di chuyn xc nh bi xu Z di khng qu 200 gm cc k
t trong tp {E, W, S, N, L ,R, B, C}, bt u bng mt trong s 4 k t u tin. Hy tnh
khong cch theo ng chim bay t im dng cui ca on thm him t Trm nghin
, -, ` - - ...

20

cu m on xut pht.
Khong cch d theo ng chim bay gia hai im c to (X1, Y1) v (X2,Y2) c tnh
theo cng thc


D liu: Vo t file vn bn EXPLORE.INP gm mt dng cha xu Z xc nh mt lch
trnh di chuyn ca on thm him.

Kt qu: a ra file vn bn EXPLORE.OUT mt s thc c 3 ch s sau du chm thp
phn, l khong cch tm c vi d liu vo cho.

V d 1:
EXPLORE.INP
WNRN

EXPLORE.OUT
2.000

V d 2:
EXPLORE.INP
WRECSSCRWWCRN

EXPLORE.OUT
3.000



/* Code ca @AlexBlack
ta ch cn phi tm ta im cui thi.
tng l da trn 4 nguyn l c bn v hng ng ty nam
bc. ri r th da vo 4 hng m tnh ton.
lu v tr c xt s tng quan ca v tr mi vi v tr c
m tnh ton cho chnh xc
*/
#include "stdio.h"
#include "math.h"
void East(int &x,int &y,int &ex,int &ey)
{
ex=x,ey=y,x++;
}

void West(int &x,int &y,int &ex,int &ey)
{
ex=x,ey=y,x--;
}

void North(int &x,int &y,int &ex,int &ey)
{
, -, ` - - ...

21

ex=x,ey=y,y++;
}

void South(int &x,int &y,int &ex,int &ey)
{
ex=x,ey=y,y--;
}

void Right(int &x,int &y,int &ex,int &ey)
{
switch(x-ex)
{
case 1:South( x, y, ex, ey);break;
case -1:North( x, y, ex, ey);break;
case 0:
switch(y-ey)
{
case 1:East( x, y, ex, ey);break;
case -1:West( x, y, ex, ey);break;
};break;
}
}

void Left(int &x,int &y,int &ex,int &ey)
{
switch(x-ex)
{
case 1:North( x, y, ex, ey);break;
case -1:South( x, y, ex, ey);break;
case 0:
switch(y-ey)
{
case 1:West( x, y, ex, ey);break;
case -1:East( x, y, ex, ey);break;
};break;
}
}

void Continue(int &x,int &y,int &ex,int &ey)
{

switch(x-ex)
{
case 1:East( x, y, ex, ey);break;
case -1:West( x, y, ex, ey);break;

case 0:
switch(y-ey)
{
case 1:North( x, y, ex, ey);break;
case -1:South( x, y, ex, ey);break;
};break;
}
}

void Back(int &x,int &y,int &ex,int &ey)
{
switch(x-ex)
, -, ` - - ...

22

{ case 1:West( x, y, ex, ey);break;
case -1:East( x, y, ex, ey);break;

case 0:
switch(y-ey)
{
case 1:South( x, y, ex, ey);break;
case -1:North( x, y, ex, ey);break;
};break;
}
}



void xl(int &x,int &y,int &ex,int &ey,char c)
{
switch(c)
{
case 'E':East( x, y, ex, ey);break;
case 'W':West( x, y, ex, ey);break;
case 'N':North( x, y, ex, ey);break;
case 'S':South( x, y, ex, ey);break;
case 'L':Left( x, y, ex, ey);break;
case 'R':Right( x, y, ex, ey);break;
case 'C':Continue( x, y, ex, ey);break;
case 'B':Back( x, y, ex, ey);break;
}
}

double khoangcach(char *A,int n)
{
int x=0,y=0,ex=0,ey=0;
for(int i=0;i<n;i++)
{
xl(x,y,ex,ey,A[i]);
}

return sqrt((double)(x*x+y*y));
}


int main()
{
char A[]={'W','R','E','C','S','S','C','R','W','W','C','R','N'};int n=13;

double kq=khoangcach(A,n);
printf("%.1lf",kq);
}





Bi : Radar ( Ko chuyn 2006)
Mt vng bin hnh ch nht c chia l thnh m hng c nh s t 1 n m t trn
xung di v n ct c nh s t 1 n n t tri sang phi. L nm v tr giao ca hng p
, -, ` - - ...

23

(1 p m) v ct q (1 q n) c gi l l c ta (p, q). bo v cc gin khoan du trn
vng bin ny ngi ta b tr mt s radar ti mt s l. Mi radar c kh nng pht hin tu
thuyn ti chnh l v 8 l ln cn (4 l chung cnh v 4 l chung nh) k c trn bin ca
cc l ny. Mt l trn vng bin c coi l an ton nu tu t ngoi vng bin trn mun vo
trong l th d i theo ng i nh th no cng u b t nht mt radar pht hin.
Yu cu: Cho kch thc ca vng bin v v tr ca cc l c b tr radar. Hy xc nh tng
s l an ton nm trong vng bin ny.
D liu: Vo t tp vn bn RADAR.INP c nh dng nh sau:
Dng u ghi hai s nguyn dng m v n (1 m, n 300) l kch thc (hng v ct) ca vng
bin. Hai s c ghi cch nhau mt du cch.
Dng th hai ghi s nguyn k (1 k m x n) l s cc radar c b tr.
Trn dng th i trong k dng tip theo ghi hai s nguyn dng p, q (1 p m, 1 q n) l ta
l b tr radar th i. Hai s c ghi cch nhau mt du cch.
Kt qu: Ghi ra tp vn bn RADAR.OUT mt s nguyn dng l tng s cc l an ton trong
vng bin.
V d:
RADAR.INP
8 8
4
1 1
2 4
4 1
4 3

RADAR.OUT
23



/* Code ca @pannaturo
- tng:
Gi s c vng n x m v ta cc rada
Ta lu n vo trong mng kch thc ( n + 2 ) * ( m + 2 )
V d kch thc 3 x 3 v rada c ta ( 1, 1 )
nh th bnh thng v tr rada l ( 0, 0 ) trong mng 3 x
3
By gi ta lu n vo mng 5 x 5 => ta ( 1 x 1 )
T khi xt cc an ton hay khng ta trnh phi xt xem
rada c nm trn bin hay khng.
Cch ny s tn chi ph hn bnh thng.
*/
#include <iostream>
#include <fstream>
using namespace std;
#define MAX 50
int main()
{
int nCol, nRow, nRada;
fstream fin( "input.txt", ios::in );
fin >> nCol >> nRow >> nRada;
, -, ` - - ...

24

bool arr[ MAX ][ MAX ];
for( int i = 0; i <= nRow + 1; i++ )
for( int j = 0; j <= nCol + 1; j++ )
arr[ i ][ j ] = false;
int xx, yy;
for( int i = 0; i < nRada; i++ )
{
fin >> xx >> yy;
arr[xx][yy]=arr[xx][yy -1]=arr[xx][ yy + 1]=true;
arr[xx-1][yy-1]=arr[xx-1][yy]=arr[xx -1][yy+1]=true;
arr[xx +1][yy-1] = arr[xx+1][yy] = arr[xx+1][yy+1]=true;
}
fin.close();
int count = 0;
for( int i = 1; i <= nRow; i++ )
for( int j = 1; j <= nCol; j++ )
if ( arr[ i ][ j ] )
count++;
fstream fout( "output.txt", ios::out );
fout << count;
fout.close();
return 0;
}



/* Code ca @hienclubvn
tng: Ci no an ton cho bng 1
*/
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define INPUT "RADAR.INP"
#define OUTPUT "RADAR.OUT"
int **B,n,m;
int dx[3]={-1,0,1};
int dy[3]={-1,0,1};
void Rada(int x,int y)
{
int i,j,u,v;
for(i=0;i<3;i++)
{
u=x+dx[i];
for(j=0;j<3;j++)
{
v=y+dy[j];
if((u>=1&&u<=n)&&(v>=1&&v<=m))
{
B[u-1][v-1]=1;
}
}
}
}
void Print()
{
int i,j;
for(i=0;i<m;i++)
, -, ` - - ...

25

{
for(j=0;j<m;j++)
printf("%d ",B[i][j]);
printf("\n");
}
}
int SumSafe() // Tng cc an ton
{
int i,j,temp=0;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
if(B[i][j]==1)temp++;
return temp;
}
int main()
{
//Read File
FILE *fin;
fin=fopen(INPUT,"r");
// Cap phat bo nho
fscanf(fin,"%d %d\n",&m,&n);
B=(int**)malloc(m*sizeof(int));
for(int i=0;i<m;i++)
{
B[i]=(int*)malloc(n*sizeof(int));
for(int j=0;j<n;j++) B[i][j]=0;
}
int temp,x,y;
fscanf(fin,"%d\n",&temp);
for(int i=0;i<temp;i++)
{
fscanf(fin,"%d %d\n",&x,&y);
Rada(x,y);
}
fclose(fin);
//Xuat ra man hinh
Print();
printf("Tong Cell Safe = %d",SumSafe());
//Ghi vao File
FILE *fout;
fout=fopen(OUTPUT,"w");
fprintf(fout,"%d",SumSafe());
fclose(fout);
getch();
}


/* Code ca @AlexBlack
tng : xt nhng ch khng phi l rada kim tra xem ch
c phi l vng an ton hay khng
y mnh s dng mng t 1-m,1-n b qua vic kim tra
iu kin bin.
*/
#include<stdio.h>
#define input "water.txt"
typedef struct Rada
{
, -, ` - - ...

26

int n,m;
int **Array;
int nrada;
};

void Init(Rada &r)
{
for(int i=0;i<=r.m;i++)
for(int j=0;j<=r.n;j++)
r.Array[i][j]=0;
}
int Nhap(Rada &r)
{
FILE *f=fopen(input,"rt");
if(f==NULL)
return 0;
fscanf(f,"%d",&r.m);
fscanf(f,"%d",&r.n);
r.m++;
r.n++;
r.Array=new int*[r.m+1];
for(int i=0;i<=r.n;i++)
{
r.Array[i]=new int[r.n+1];
}
Init(r);
fscanf(f,"%d",&r.nrada);
int p,q;
while(!feof(f))
{
fscanf(f,"%d",&p);
fscanf(f,"%d",&q);
r.Array[p+1][q+1]=1;
}
fclose(f);
return 1;
}

void ChanHoa(Rada &r)
{
for(int i=1;i<r.m;i++)
for(int j=1;j<r.n;j++)
{
if(r.Array[i][j]==0)
{
if(r.Array[i-1][j-1]==1||r.Array[i-1][j]==1||r.Array[i-
1][j+1]==1)r.Array[i][j]=2;
if(r.Array[i][j-1]==1||r.Array[i][j+1]==1)r.Array[i][j]=2;
if(r.Array[i+1][j-
1]==1||r.Array[i+1][j]==1||r.Array[i+1][j+1]==1)r.Array[i][j]=2;

}
}
}

void Xuat(Rada r)
{
for(int i=1;i<r.m;i++)
, -, ` - - ...

27

{
for(int j=1;j<r.n;j++)
printf("%d ",r.Array[i][j]);
printf("\n");
}
}

void XuatAnToan(Rada r)
{
ChanHoa(r);
int sum=0;
for(int i=1;i<r.m;i++)
for(int j=1;j<r.n;j++)
if(r.Array[i][j]!=0)
sum+=1;
printf("Tong so o an toan: %d",sum);
}

//hy vng nh cp pht
void Detroy(Rada &r)
{
for(int i=0;i<r.m+1;i++)
delete []r.Array[i];
delete []r.Array;
}


int main()
{
Rada r;
if(!Nhap(r))
{
printf("Khong mo duoc file.");
return 0;
}
XuatAnToan(r);
Detroy(r);
return 0;
}



Bi: SIU M( thi CAO NG OLP 2006)

Siu m l mt loi m c nhiu ng dng quan trng trong lnh vc m ha v truyn tin. Trong
bi ny, ta xt bi ton n gin sau y v siu m. Cho u v v l hai xu k t khc rng c
di hu hn. Xu u c gi l xu con ca xu v nu u c th nhn c t v bng cch xa bt
t nht mt k t trong v. Mt tp X cc xu khc rng c di hu hn c gi l siu m nu
mi cp u, v bt k thuc X, u khng l xu con ca v v v khng l xu con ca u.
Cho trc mt tp X = {x1, x2, ..., xN} gm N xu khc rng, mi k t trong xu l 0 hoc 1.
Hy kim tra xem X c l mt siu m hay khng?
D liu: vo t file vn bn HCODE.INP c nh dng nh sau:
Dng u tin cha s nguyn dng N (N 500);
Dng th i trong N dng tip theo ghi xu xi ca tp X, di ca xu xi khng qu 15, vi i =
1, 2, ..., N.
, -, ` - - ...

28

Kt qu: ghi ra file vn bn HCODE.OUT c nh dng nh sau:
Nu X l siu m th ghi s 1;
Nu X khng l siu m th dng u tin ghi s 0, dng th hai ghi ch s i nh nht m hoc
xi l xu con ca xj hoc xj l xu con ca xi, vi xi, xj thuc X, 1 i < j N.
V d:
HCODE.INP
5
1111
100101
01011
000
0001000

HCODE.OUT
0
2

HCODE.INP
3
010
1000
11

HCODE.OUT
1



// Code ca @vietduc
#include <iostream>
#include <fstream>
using namespace std;

bool achuab(char *a, char *b)
{
while (*a)
{
if (*a == *b) a++,b++;
else a++;
}
return (!*b);
}
int main()
{
ifstream infile("hcode.txt");
char **x;
int N;
infile >> N;
x=new char*[N];
for (int i=0; i<N; i++)
{
x[i]=new char[20];
, -, ` - - ...

29

infile >> x[i];
}
for (i=0; i<N; i++)
for (int j=0; j<N; j++)
if (i!=j && achuab(x[i],x[j]))
{
cout << "0\n"<<i+1<<" "<<j+1<<endl;
return 0;
}
cout << "1\n";
return 0;
}





Bi: Tnh im (Tp th ko chuyn 2006)

Trong k thi vn p hc sinh phi tr li cc cu hi ca thy gio. Nu tr li ng,
thy gio nh du bng k t C (Correct), nu sai th nh du N (No Correct). Khi hc sinh
tr li ng, thy s a ra cu hi tip theo kh hn cu trc, cn khi tr li sai thy s cho
cu hi mi d hn. Sau khi thi xong, kt qu ca mi hc sinh l mt xu cc k t C v N.
im s ca hc sinh s c tnh nh sau: Vi cc cu tr li sai hc sinh khng c im,
vi mi cu tr li ng hc sinh nhn c im bng s ln tr li ng lin tip t cu tr li
ny tr v trc. V d, nu kt qu l CCNNCNNCCC, th im s s l
1+2+0+1+0+0+1+2+3 = 10.

Yu cu: Cho xu kt qu di khng qu 1000, hy tnh im ca hc sinh.

D liu: Vo t file vn bn SCORE.INP cha mt xu kt qu thi.

Kt qu: a ra file vn bn SCORE.OUT im s ca kt qu thi.

V d:

SCORE.INP
CCNNCNNCCC

SCORE.OUT
10



//Code ca @vietduc
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
ifstream infile("score.txt");
, -, ` - - ...

30

char c;
int b=0,t=0;
infile.get(c);
do
{
if (c=='C' || c== 'c')
b++;
else b=0;
t+=b;
infile.get(c);
}
while (!infile.eof());
cout << t;
return 0;
}



*/ Code ca @hienclubvn
C: ng, N: ko ng
*/
#include<stdio.h>
#define IN "SCORE.INP"
#define OUT "SCORE.OUT"
int main ()
{
FILE *fin,*fout;
fin=fopen(IN,"r");
char c;
int count=0,Sum=0;
while (!feof(fin))
{
c=fgetc(fin);
if(c=='C')
count++;
else count=0;
Sum+=count;
}
fout=fopen(OUT,"w");
fprintf(fout,"%d",Sum);
fclose(fin);
fclose(fout);
}




Bi: Phn phng (Tp th 2006)

Mt nhm N nh t ph t chc i nh golf. Ti a im nh golf c mt dy cc ngi nh
ngh nm trn mt a th sng ni rt hng v, c ngi nh th cnh sng, c ngi nh th cnh
ni ... Mi ngi nh ch c mt ngi. y cng chnh l l do khin cc nh t ph khng
sao tha thun c ngi no s ngi nh no. gii quyt b tc v chiu lng cc t ph,
gim c khu ngh mt quyt nh s dng M ngi nh lin nhau, nh s t 1 n M, cc nh
, -, ` - - ...

31

t ph ly ra N phng trong . Nh t ph th i trong nhm s s dng s chng minh th Si
ca mnh (khng c hai nh t ph no c cng s chng minh th) chn ra c ngi nh
mnh s . Thao tc chn s nh sau:
Nh t ph s bt u m t ngi nh nh s 1,
Dng li ngi nh tng ng vi s chng minh th ca mnh,
Nu m n ngi nh nh s M th li tip tc m t ngi nh nh s 1.
Yu cu: Hy gip gim c khu ngh mt tm ra s M b nht khng c hai nh t ph no
chn cng mt ngi nh theo cc thao tc va nu trn.
D liu: Vo t file vn bn ROOM.INP theo qui cch nh sau:
Dng th nht ghi s nguyn dng N (1<= N <=300) l s cc nh t ph i nh golf.
Dng th hai ghi N s Si (1<= Si <= 1000000) (i=1..N) cch nhau bi du cch, tng ng l
s chng minh th ca N nh t ph.
Kt qu: Ghi ra file vn bn ROOM.OUT mt s nguyn M, l s lng phng t nht gim c
khu ngh mt phi s dng ng vi d liu vo cho.

V d:
ROOM.INP
2
4 6

ROOM.OUT
3



/* Code ca @vietduc
tng: nu tt c s CMT u khc nhau th m s chy t n->
s CMT ln nht, c cho m tng dn ln v mi n nh vy ta s x n,
nu n l s cn tm th tt c cc phn d ca s CMT chia cho m
khc nhau, ch cn da vo k ny nu m tha mn th in ra
*/
#include<iostream>
#include<fstream>
using namespace std;

bool check(int *b, int d, int i)
{
for (int y=0; y<i; y++)
if (d==b[y])
return 0;
return 1;
}
int main()
{
ifstream infile("room.txt");
int i, n, *a, m, M;
infile >> n;
a=new int[n];
for (i=0; i<n; i++)
infile >> a[i];
m=n;
while (m)
, -, ` - - ...

32

{
int *b;
b=new int[n];
for (i=0; i<n; i++)
if (check(b,a[i]%m,i))
{
b[i]=a[i]%m;
if (i==n-1)
{
for (int y=0; y<n; y++)
cout << b[y]+1 <<" "; // in ra cac phong duoc o
M=m;
m=-1;
}
}
else
break;
delete []b;
m++;
}
cout <<endl<< M << endl;
infile.close();
return 0;
}



/* Code ca @hienclubvn
Ging nh gii thut ca @vietduc a + tng ca @Tadius
Bi ton a v dng n gin hn cho pht biu sau:
C mt dy s nguyn dng c n phn t.
Tm ra s m nh nht sao cho mi phn t i,j bt k thuc dy
cho tha
A[i]%m != A[j]%=m;
V m >= n. Th bi ton mi c li gii
*/
#include<stdio.h>
#include<stdlib.h>
#define IN "ROOM.INP"
#define OUT "ROOM.OUT"
int *A,*B,n;
FILE *fin,*fout;
void ReadFile()
{
fin=fopen(IN,"r");
fscanf(fin,"%d",&n);
// Cap phat bo nho dong
A=(int*)malloc(n*sizeof(int));
// Load Mang
int i;
for(i=0;i<n;i++) fscanf(fin,"%d",&A[i]);
fclose(fin);
}
int Check(int j)
{
for(int i=0;i<j;i++)
if(B[j]==B[i]) return 0;
, -, ` - - ...

33

return 1;
}
void Write(int tmp)
{
fout=fopen(OUT,"w");
fprintf(fout,"%d",tmp);
fclose(fout);
}
int main()
{
ReadFile();
int i,m=n,Flag=0;
// Cho m tang tu n++, den khi thoa man
do
{
int temp=m;
// Creat Arr phu
B=(int*)malloc(n*sizeof(int));
for(i=0;i<n;i++)
{
B[i]=A[i]%m;
if(i && !Check(i))
{
m++;
free(B);
break;
}
}
if (temp==m) Flag=1;

}while(!Flag);
free(A);
Write(m);
}








Bi: Dy S (Ko chuyn 2008)

Cho dy s A0,A1,A2,..
Trong : A0=0;
Ai l s nguyn dng nh nht ln hn Ai-1 v trong biu din thp phn ca Ai ko c cha
ch s trong biu din thp phn ca Ai-1 vi i>=1
Nh vy cc phn t u tin ca dy A l:


Yu cu: cho s t nhin N Hy tm AN
, -, ` - - ...

34

D liu : t File NUMSEQ.INP trong cha duy nht s N (0=<N<=500)
Kt qu: ghi ra File NUMSEQ.OUT gi tr AN
V d:



/* Code ca @hiencubvn
Giai thuat : dua vao quy luat de CODE
0 1 2 3 4 5 6 7 8 9 10 22 30 41 50 61 70 81 90 111
200 311 400 511 600 711 800 911 == 8 so (3 chu so)
2000 3111 4000 5111 6000 7111 8000 9111 == 8 so (4 chu so)
*/
#include<stdio.h>
#include<conio.h>
#define INPUT "NUMSEQ.INP"
#define OUTPUT "NUMSEQ.OUT"
int main()
{
int n, A[20]={0,1,2,3,4,5,6,7,8,9,10,22,31,40,50,61,70,81,90,111}; // 0-
>19
FILE *fin,*fout;
fin=fopen(INPUT,"r");
fscanf(fin,"%d",&n);
fclose(fin);
fout=fopen(OUTPUT,"w");
//Process
int heso,chiso,i;
if(n<=19)
{
fprintf(fout,"%d",A[n]);
fclose(fout);
}
else
{
n-=20;
chiso=n/8+2;// chi so chay
heso=n%8+2; // he so dau
if(n%2==0)
{
fprintf(fout,"%d",heso);
for(i=0;i<chiso;i++) fprintf(fout,"%d",0);
fclose(fout);
}
else
{
fprintf(fout,"%d",heso);
for(i=0;i<chiso;i++)fprintf(fout,"%d",1);
, -, ` - - ...

35

fclose(fout);
}
}
return 0;
}


Bi: o to t xa (Olympic tin hc SV 2009)

Mt trong nhng vn phi gii quyt trong o to t xa l tm hiu xem hc vin c thc s
ngi trc mn hnh theo di cc bi ging bt buc hay khng. Hc vin c th ti cc bi ging
v v dng cc phn mm chuyn dng do Trung tm o to cung cp xem v hc vo bt c
thi im no thun tin i vi mnh. V vy, cn c nhng phng php kim tra t nh v
khoa hc bit chnh xc tnh hnh hc tp ca hc vin.
Thc t cho thy rng, nu thng tin hin ln trn mn hnh vi khong thi gian t hn 1/24 giy
th mt ngi khng kp ghi nhn c hnh nh nhng no b vn tip nhn thng tin! Da vo
tnh cht ny phn mm ging dy thit k mt ca s nh, trn c mi giy, nu c xut hin
cu hi trc nghim ngn cng vi cu tr li th chng s hin th trong khong thi gian 1/80
cui cng ca giy. Nhng hc vin thc hin chng trnh hc nghim tc s tip nhn c
cc cu hi thi trong tnh trng v thc v s d dng vt qua k thi hoc kim tra. Ngn hng
c n cu hi trc nghim v cu th i phi c hin th Ci ln. cng c kin thc v trnh
s n iu lm no b nhm chn, vic hin th cu hi phi m bo trong m giy lin
tip bt k khng c 2 cu hi no ging nhau.
Yu cu: Hy xc nh khong thi gian ti thiu (tnh theo giy) thc hin yu cu trn.

D liu: Vo t file vn bn EL.INP:
Dng u tin cha 2 s nguyn cch nhau mt du cch n v m (1<=m<=n<=100),
Dng th i trong n dng sau cha s nguyn Ci(0<Ci<=100)
Cc s trn mt dng cch nhau mt du cch.
Kt qu: a ra file vn bn EL.OUT mt s nguyn khong thi gian tm c.
V d:

EL.INP
3 2
2
3
1
EL.OUT
6

Vi VD trn, ta c n=3 cu hi trc nghim, v s ln phi hin th l
Cu hi 1(c1): 2 ln
Cu hi 2(c2): 3 ln
Cu hi 3:(c3): 1 ln
Yu cu ca VD l sp lch sao cho trong m=2 giy lin tip bt k ko c 2 cu hi no ging
nhau
, -, ` - - ...

36

Vi VD trn ta c th c cc p n nh sau
1 p n hp l : c2 ngh c2 c1 ngh c2 c1 c3 : 8 giy
1 p n ko hp l : c1 c2 c3 c2 c2 c1
1 p n ti u : c1 c2 c1 c2 c3 c2: 6 giy



/* Code ca @vietduc
ban u sort n theo th t gim dn, c 100 s nn chc khng
cn qicksort
th t nh vy chnh l th t u tin xp vo dy kt qu, dng
1 mng rng l m kim tra s xut hin ca cu hi th i
xp vo , ta tin hnh n data vo vo trc ra trc c
lm th cho n lc s cc cu l 0
*/

#include <iostream>
#include <fstream>
using namespace std;
int n,m;
struct nodevong
{
int ci;
nodevong* next;
nodevong(){ci=-1;next=NULL;}
};
struct nodemang
{
nodemang(){ed=true;}
bool ed;
int count;
};
void tao_vong(nodevong*&l,int m)
{
nodevong* t,*v;
for (int i=1;i<=m;i++)
{
t=new nodevong;
if (l==NULL)
v=l=t;
else
l=l->next=t;
}
l->next=v;
}
int tinhthoigian(nodevong*&l,nodemang*&c)
{
int OLP=0,nn=n;
while (nn)
{
if(l->ci >= 0 && c[l->ci].count>0 )
c[l->ci].ed=true;
int k=0;
while (!c[k].ed) k++;
//cout << k<<endl;
, -, ` - - ...

37

l->ci=k;
l=l->next;
if (k<n)
{
c[k].count--;
if (!c[k].count)
nn--;
c[k].ed=false;
}
OLP++;
}
return OLP;
}

int main()
{
ifstream infile("el.txt");
infile >> n >>m;
nodemang *c;
c=new nodemang[n+1];
for(int i=0; i<n; i++)
infile>>c[i].count;
// sap xep
for (i=0; i<n-1; i++)
for (int j=i+1; j<n;j++)
if (c[i].count<c[j].count)
{
nodemang t=c[i];
c[i]=c[j];
c[j]=t;
}
nodevong* l=NULL;
tao_vong(l,m);
cout << tinhthoigian(l,c)<<endl;
return 0;
}





Bi: Dy s (Ko chuyn 2009)

Cho dy s gm n s nguyn a1, a2, , an. Tm gi tr ln nht ca hm
f (i,j,k)= ai +2 aj +3 ak vi 1 i < j < k n.
V d: vi dy gm 5 s -1, 2, -2, -3, 5 th f (1,2,5)=-1+22+35=18 l ln nht.
D liu: Vo t file vn bn SEQUENCE.INP:
Dng u tin cha s nguyn n (3 n 10^5),
Dng th i trong n dng tip theo cha s nguyn ai (|ai| 10^9).
Kt qu: a ra file vn bn SEQUENCE.OUT mt s nguyn gi tr ln nht ca
hm f (i,j,k)tm c.
V d:
SEQUENCE.INP
5
, -, ` - - ...

38

-1
2
-2
-3
5
SEQUENCE.OUT
18


// Code ca @Sounj
// Dng : Quy Hoch ng
#include <iostream>
#include <conio.h>
#define MAX 100000
using namespace std;
int max_f(int a[], int N)
{
if(N<3) return 0;

int f[MAX];
int luu, tg;
int i;

// vng lp u tin: f = ai
f[0] = a[0];
for(i=1; i<N; i++)
if(f[i-1]<a[i]) f[i]=a[i]; else f[i] = f[i-1];

// vng lp th 2: f = ai + 2* a[j]
luu = f[1]; f[1] = f[0] + a[1]*2;
for(i=2; i<N; i++)
{
tg = f[i];
if(f[i-1]<luu+a[i]*2) f[i] = luu+a[i]*2; else f[i] = f[i-1];
luu = tg;
}

// vng lp th 3: f = ai + 2* a[j] + 3*a[k]
luu = f[2]; f[2] = f[1] + a[2]*3;
for(i=3; i<N; i++)
{
tg = f[i];
if(f[i-1]<luu+a[i]*3) f[i] = luu+a[i]*3; else f[i] = f[i-1];
luu = tg;
}

return f[N-1];
}

void main()
{
int a[] = {-1, 2, -2, -3, 5};
int N = 5;

cout<<"Ket qua: "<< max_f(a, N);
, -, ` - - ...

39

getch();
}



// Code ca @hunterphu
// Dng : Quy Hoch ng
#include<iostream>
#define k -1000000000
using namespace std;
long long a[100001];
int n;
long long x=k,y=k,z=k;
int main()
{
scanf ("%d",&n);
for (int i=1;i<=n;i++)
{
scanf ("%I64d",&a[i]);
x=max(x,y+3*a[i]);
y=max(y,z+2*a[i]);
z=max(z,a[i]);
}
printf ("%I64d",x);
system("pause");
return 0;
}




Bi :Kt bn (Ko chuyn 2009)

Theo quan nim ca ngi ng c, mi c nhn khi sinh ra u ng vi mt ngi sao,
c gi l sao chiu mnh. Cc hot ng ca c nhn u b chi phi bi ngi sao ny, k c
qu trnh kt bn hn h. Theo thuyt m dng Ng hnh, hai ngi ch c th to lp mi
quan h bn vng khi cc sao chiu mnh ca h khng c cc thuc tnh tng khc. Qua hng
nghn nm quan st v chim nghim, cc chim tinh gia ghi nhn c n sao v hu ht cc
tnh cht tng sinh tng khc gia chng. c th nhanh chng p ng nhu cu kim tra
tng hp ca cc sao, hip hi ABS (Association of Broker for Single) to lp c s d liu
ghi nhn tnh cht ca tt c cc sao kho st c. Trong c s d liu ny, cc sao c
nh s t 1 ti n; sao th i c mt gi tr si th hin kh nng thch nghi ca sao gi l thch
nghi. Hai sao khc nhau c th c cng thch nghi. Thng qua thch nghi ca cc sao,
ngi ta xc nh kh nng tng hp ca chng. Kh nng tng hp ca 2 sao c tnh bng
tng 2 thch nghi ca chng.
Bi ton: Cho s nguyn dng n, dy s1, s2, , sn l thch nghi ca cc sao v s nguyn
B. Hy xc nh s lng cc cp sao (i, j) m si + sj = B, vi 1 i < j n.
V d: trong 5 sao vi thch nghi 3, 5, 6, 5, 3 c 4 cp c kh nng tng hp bng 8.
D liu: Vo t file vn bn FRIEND.INP:
Dng u tin ghi 2 s nguyn n, B (2 n 10^5, |B| 10^9),
Mi dng trong n dng tip theo ghi mt s nguyn l thch nghi ca mt
sao, thch nghi c tr tuyt i b hn 2^15
, -, ` - - ...

40

.
Hai s trn cng dng cch nhau t nht mt du cch.
Kt qu: a ra file vn bn FRIEND.OUT mt s nguyn s lng cp sao c
tng hp B tm c.
V d
FRIEND.INP
5 8
3
5
6
5
3
FRIEND.OUT
4



// Code ca @hienclubvn
#include<stdio.h>
#include<stdlib.h>
#define IN "FRIEND.INP"
#define OUT "FRIEND.OUT"
long *A;
int n,B,count=0;
void Read()
{
FILE *fin;
fin=fopen(IN,"r");
fscanf(fin,"%d %d",&n,&B);
// Cap Phat bo nho dong
A=(long*)malloc(n*sizeof(long));
int i;
for(i=0;i<n;i++)
fscanf(fin,"%d",&A[i]);
fclose(fin);
}
void Write()
{
FILE *fout;
fout=fopen(OUT,"w");
fprintf(fout,"%d\n",count);
fclose(fout);
}
void Process()
{
int i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(A[i]+A[j]==B) count++;
}
int main()
{
Read();
Process();
, -, ` - - ...

41

Write();
return 0;
}






// Code ca @Vibzz90
#include<iostream>
#include<fstream>
using namespace std;
const char in[]="bai1in.txt";
const char out[]="bai1out.txt";
int *a;
long n,B;
int sosanh(void const *a1, void const *a2)
{
return (*(int*)a1-*(int*)a2);
}
int process()
{
int dem=0;
long buf;
qsort(a,n,sizeof(int),sosanh);
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++)
{
buf=a[i]+a[j];
if(buf==B) dem++;
if(buf>B) break;
}
}
return dem;
}
void input()
{
ifstream f(in);
f>>n>>B;
a=new int[n];
for(int i=0;i<n;i++) f>>a[i];
f.close();
}
void gentest()
{
cout<<"Nhap n,B: ";
cin>>n>>B;
ofstream f(in);
f<<n<<" "<<B<<endl;
srand(time(NULL));
for(int i=0;i<n;i++)
f<<(rand()+rand()-32768)<<endl;
f.close();
}
int main()
{
cout<<"gentest?";
, -, ` - - ...

42

int choice;cin>>choice;
if(choice) gentest();
input();
cout<<process()<<endl;
system("pause");
return 0;
}




Bi: Hiu chnh nh n sc (Ko chuyn 2009)

nh n sc l nh ch gm mt mu nhng cc vng trn nh khc nhau v mc sng
v d nh xm (grayscale image). biu din mt nh n sc hnh ch nht trn my tnh,
ngi ta thng dng mt ma trn P, gi tr ti dng i ct j ca P chnh l mc sng ca im
nh ti v tr tng ng trn nh.
Vic chp v a nh vo my tnh thnh thong c sai st to nn nhiu. Nhiu l cc im nh
c sng khc hn vng nh xung quanh. C nhiu cch lm gim s khc bit ny. Mt trong
nhng cch l dng mt ca s hnh vung 3x3 c cnh song song vi cnh ca nh v hiu
chnh cc im nh trong vng nh b nhiu. Mi im nh dng i ct j s c thay th bng
trung v ca cc gi tr nh ang c trong ca s c tm ti v tr (i, j) nh gc ban u. Trong
cc trng hp im nh bin, ch xt trung v ca cc gi tr nm trong nh.
Nhc li rng, trung v ca k s a1, a2, ak l s v tr t khi sp xp k s ny theo trt t tng
dn, trong t l phn nguyn ca s (k+1)/2
Di y l v d m t vic hiu chnh nh bng cch nu trn.


Bi ton: Cho ma trn s nguyn P cp m n biu din mt vng nh n sc c nhiu.
Hy dng cch nu trn hiu chnh cc im nh trong vng nh b nhiu.
D liu: Vo t file vn bn ADJUST.INP gm:
Dng u tin cha 2 s nguyn m, n (1 m, n 100),
m dng tip theo mi dng ghi n s nguyn khng m l mc sng cc im
nh. Gi tr mc sng khng vt qu 255.
Kt qu: a ra file vn bn ADJUST.OUT gm m dng, mi dng gm n s l cc
mc sng trong vng nh sau khi hiu chnh.
Hai s trn cng dng cch nhau t nht mt du cch.
V d:
ADJUST.INP
4 5
10 11 12 13 14
, -, ` - - ...

43

15 0 16 17 11
4 5 6 7 8
2 10 6 7 5

ADJUST.OUT
10 11 12 13 13
5 10 11 12 11
4 6 7 7 7
4 5 6 6 7




// Code ca @hienclubvn
#include<stdio.h>
#include<stdlib.h>
#define IN "ADJUST.INP"
#define OUT "ADJUST.OUT"
int **A,**T,m,n;
void Input()
{
FILE *fin;
fin=fopen(IN,"r");
int i,j;
fscanf(fin,"%d %d",&m,&n);
// Cap phat dong
A=(int**)malloc(m*sizeof(int));
for(i=0;i<m;i++) A[i]=(int*)malloc(n*sizeof(int));
T=(int**)malloc(m*sizeof(int));
for(i=0;i<m;i++) T[i]=(int*)malloc(n*sizeof(int));
// read File
for(i=0;i<m;i++)
for(j=0;j<n;j++) fscanf(fin,"%d",&A[i][j]);
fclose(fin);
}
void Sort(int *B,int n)
{
int i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(B[i]>B[j])
{
int temp=B[i];
B[i]=B[j];
B[j]=temp;
}
}
int FindPoint(int i,int j)
{
int B[10];
int k,l,m1,n1,t=0;
int di[3]={-1,0,1};
int dj[3]={-1,0,1};
for(k=0;k<3;k++)
{
m1=i+di[k];
, -, ` - - ...

44

for(l=0;l<3;l++)
{
n1=j+dj[l];
if(m1>=0&&m1<m&&n1>=0&&n1<n)
B[t++]=A[m1][n1];
}
}
Sort(B,t);
int p=(t+1)/2-1;
int x=B[p];
return x;
}
void Process()
{
int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
T[i][j]=FindPoint(i,j);
}
}
void Output()
{
FILE *fout;
fout=fopen(OUT,"w");
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
if (j!=n-1)fprintf(fout,"%d ",T[i][j]);
else fprintf(fout,"%d\n",T[i][j]);
}
fclose(fout);
}
int main()
{
Input();
Process();
Output();
free(A);
free(T);
return 0;
}

You might also like