Anda di halaman 1dari 15

OSN IX

Sesi 1

1. 300 27. 15 dan 4021


2. 45350 28. 49
3. 111 29. 333
4. -7 -13 30. 3
5. 2
6. 503 31. 8
7. 21 32. 9
8. 84 33. 3
9. 24 34. 27
10. 4 2 7 6 3 9 8 35. 60
11. 12 36. 3
12. 05/03/2100 37. 40951
13. 9 38. 7
14. 1501 39. 1806
15. 2 40. 15
16. 14 41. 588
17. 28 42. 300
18. 0 43. 59
19. 6 44. 2178
20. 13 45. 27
21. 11 46. 17
22. 10 47. 126
23. 6 48. 8
24. 6 49. 10
25. 15 50. 2
26. 1*4*9*16*25*36*49*64*81*100*

Halaman 1 dari 15
OSN IX
Sesi 2: Melukis
#include <cstdio>
#include <cstdlib>

int baris,kolom,b1,b2,k2,k1,jml,nilai;
int ii,jj,i,j;
int mat[200][200];
int main() {
scanf("%d %d", &kolom, &baris);
scanf("%d", &jml);
for (i=1;i<=jml;i++) {
scanf("%d %d %d %d %d", &k1,&b1,&k2,&b2,&nilai);
for (ii=k1;ii<=k2;ii++) {
for (jj=b1;jj<=b2;jj++) {
mat[jj][ii] = nilai;
}
}
}
for (i=1;i<=baris;i++) {
for (j=1;j<=kolom;j++) {
printf("%d", mat[i][j]);
}
printf("\n");
}
}

Halaman 2 dari 15
OSN IX
Sesi 2: Pecahan Uang
var nilai,banyak:longint; end;
if nilai div 20 >=1 then
begin begin
readln(nilai); banyak := nilai div 20;
if nilai div 1000 >=1 then nilai := nilai mod 20;
begin writeln(20,' ',banyak);
banyak := nilai div 1000; end;
nilai := nilai mod 1000; if nilai div 10 >=1 then
writeln(1000,' ',banyak); begin
end; banyak := nilai div 10;
if nilai div 500 >=1 then nilai := nilai mod 10;
begin writeln(10,' ',banyak);
banyak := nilai div 500; end;
nilai := nilai mod 500; if nilai div 5 >=1 then
writeln(500,' ',banyak); begin
end; banyak := nilai div 5;
if nilai div 200 >=1 then nilai := nilai mod 5;
begin writeln(5,' ',banyak);
banyak := nilai div 200; end;
nilai := nilai mod 200; if nilai div 2 >=1 then
writeln(200,' ',banyak); begin
end; banyak := nilai div 2;
if nilai div 100 >=1 then nilai := nilai mod 2;
begin writeln(2,' ',banyak);
banyak := nilai div 100; end;
nilai := nilai mod 100; if nilai div 1 >=1 then
writeln(100,' ',banyak); begin
end; banyak := nilai div 1;
if nilai div 50 >=1 then nilai := nilai mod 1;
begin writeln(1,' ',banyak);
banyak := nilai div 50; end;
nilai := nilai mod 50; end.
writeln(50,' ',banyak);

Halaman 3 dari 15
OSN IX
Sesi 2: Berat Bebek
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <string>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <sstream>
#include <cmath>
#include <cstdlib>
#include <vector>
using namespace std;

int main(){
int n,terberat=0,teringan=2147483647;
while (cin>>n) {
if (n==0) {
cout<<teringan<<" "<<terberat<<endl;
terberat=0;
teringan=2147483647;
}
else {
if (n>terberat) terberat=n;
if (n<teringan) teringan=n;
}
}
if (n) cout<<teringan<<" "<<terberat<<endl;
return 0;
}

Halaman 4 dari 15
OSN IX
Sesi 2: Keluarga Bebek
var a,b,c,d,e,f,g,h,i,j,k,l,m,n,ans:longint;

begin
readln(n,d);
readln(a);
for i:=2 to n do
begin
readln(b);
if b-a>=d then inc(ans);
a:=b;
end;
writeln(ans+1);
end.

Halaman 5 dari 15
OSN IX
Sesi 2: Pasar Rakyat
var sbelum,orang,n,i:longint;

function fpb(a,b:longint):longint;
begin
if (b=0) then fpb:=a
else fpb:=fpb(b, a mod b);
end;

begin
readln(n);
readln(sbelum);
for i:=2 to n do
begin
readln(orang);
sbelum:= sbelum*(orang div fpb(sbelum,orang));
end;
writeln(sbelum);
end.

Halaman 6 dari 15
OSN IX
Sesi 2: Penjumlahan
#include <stdio.h>
#include <string>
#include <stdlib.h>
#include <algorithm>
#include <iostream>
using namespace std;

string a,b;
int temp;

string add(string x,string y) {


string w;
int t=max(x.length(),y.length())+2;
temp=x.length();
while(temp<t){x="0"+x; temp++;}
temp=y.length();
while(temp<t){y="0"+y; temp++;}
int sisa=0,rest;
char z[5];
w="";
for(int j=t-1; j>=0; j--){
rest=((x[j]-'0')+(y[j]-'0')+sisa);
sisa=rest/10;
rest%=10;
sprintf(z,"%d",rest);
w=z+w;
}
int j=0;
while(w[j]=='0')w.erase(w.begin());
return w;
}

int main() {
cin >> a >> b;
printf("%s\n",add(a,b).c_str());
}

Halaman 7 dari 15
OSN IX
Sesi 2: Susu Cap Dengklek
var max,tot:int64;
x,y,i,j,k,l,r,c,n:longint;
arr:array [0..51,0..51] of longint;

begin
readln(y,x);
readln(r,c);
for i:=1 to y do
for j:=1 to x do
read(arr[i,j]);
for i:=1 to y-r+1 do
for j:=1 to x do
begin
tot:=0;
for k:=i to i+r-1 do
for l:=1 to c do
begin
if j+l-1<=x then n:=j+l-1
else n:=j+l-1-x;
tot:=tot+arr[k,n];
end;
if max<tot then max:=tot;
end;
writeln(max);
end.

Halaman 8 dari 15
OSN IX
Sesi 2: Wildcard
var a,d:string;
s,c,q,l:integer;

begin
readln(a);
readln(c);
for s := 1 to c do
begin
readln(d); l := 0;
if length(a) <= length(d)+1 then
begin
if pos('*',a) > 1 then
for q := 1 to pos('*',a)-1 do
if d[q] <> a[q] then
begin
l:=1;
break;
end;
if l = 1 then continue;
if (pos('*',a) < length(a)) then
for q := length(a) downto pos('*',a)+1 do
if a[q] <> d[length(d)-length(a)+q] then
begin
l := 1;
break;
end;
if l = 1 then continue;
writeln(d);
end;
end;
end.

Halaman 9 dari 15
OSN IX
Sesi 3: Shuffle
var m,n,i,j,ctr,nmaster:longint;
master:array[1..200] of string;
list:array[1..200] of string;
lagu:string;
ismaster,isada:boolean;

begin
readln(m,n);
ctr := 0;
nmaster := 0;
for i := 1 to m do
list[i] := '';
for i := 1 to n do
begin
readln(lagu);
ismaster := false;
for j := 1 to nmaster do
if master[j] = lagu then ismaster := true;
if not ismaster then
begin
nmaster := nmaster + 1;
master[nmaster] := lagu;
end;
if nmaster > m then
begin
writeln('BELI BARU');
writeln(i);
exit;
end;
isada := false;
for j := 1 to ctr do
if list[j] = lagu then isada := true;
if isada then
begin
writeln('BELI BARU');
writeln(i);
exit;
end;
ctr := ctr + 1;
list[ctr] := lagu;
if ctr = m then
begin
ctr := 0;
for j := 1 to m do
list[j] := '';
end;
end;
writeln('BENAR');
end.

Halaman 10 dari 15
OSN IX
Sesi 3: Magic
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <string>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <sstream>
#include <cmath>
#include <cstdlib>
#include <vector>

using namespace std;

int bil[15][15], n;

void read() {
scanf("%d",&n);
for(int i = 1; i <= n; i++)
scanf("%d",&bil[i][1]);
}

void sulap() {
for(int j = 2; j <= n; j++)
for(int i = 1; i <= n-j+1; i++)
bil[i][j] = bil[i+1][j-1] - bil[i][j-1];
}

void ans() {
for(int j = 1; j <= n; j++) {
printf("%d",bil[1][j]);
if(j < n) printf(" ");
}
printf("\n");
}

int main () {
read();
sulap();
ans();
return 0;
}

Halaman 11 dari 15
OSN IX
Sesi 3: Missile
type data=record
awal,akhir:longint;
end;

var i,jawab,rmh,mis,j,temp2:longint;
temp:data;
ar:array [1..2000] of longint;
boom:array [1..2000] of data;
cek:array [1..2000] of boolean;

procedure qsort(left,right:longint);
var i,j,pivot1,pivot2 : longint;
begin
i := left;
j := right;
pivot1 := boom[(i+j) div 2].awal;
pivot2 := boom[(i+j) div 2].akhir;
repeat
while (boom[i].akhir < pivot2) or ((boom[i].akhir = pivot2) and
(boom[i].awal < pivot1)) do inc(i);
while (boom[j].akhir > pivot2) or ((boom[j].akhir = pivot2) and
(boom[j].awal > pivot1)) do dec(j);
if (i<=j) then begin
temp := boom[i];
boom[i] := boom[j];
boom[j] := temp;
inc(i);
dec(j);
end;
until(i>j);
if (i<right) then qsort(i,right);
if (j>left) then qsort(left,j);
end;

procedure qsort2(left,right:longint);
var i,j,pivot : longint;
begin
i := left;
j := right;
pivot := ar[(i+j) div 2];
repeat
while (ar[i] < pivot) do inc(i);
while (ar[j] > pivot) do dec(j);
if (i<=j) then begin
temp2 := ar[i];
ar[i] := ar[j];
ar[j] := temp2;
inc(i);
dec(j);
end;

Halaman 12 dari 15
OSN IX
until(i>j);
if (i<right) then qsort2(i,right);
if (j>left) then qsort2(left,j);
end;

begin
fillchar(cek,sizeof(cek),0);
fillchar(ar,sizeof(ar),0);
fillchar(boom,sizeof(boom),0);
readln(rmh,mis);
for i := 1 to rmh do read(ar[i]);
for i := 1 to mis do readln(boom[i].awal,boom[i].akhir);
qsort2(1,rmh);
qsort(1,mis);
jawab := 0;
for i := 1 to rmh do begin
for j := 1 to mis do begin
if (boom[j].awal > ar[i]) or (cek[j]) then continue;
if (ar[i] <= boom[j].akhir) and (ar[i] >= boom[j].awal) then
begin
inc(jawab);
cek[j] := true;
break;
end;
end;
end;
writeln(jawab);
end.

Halaman 13 dari 15
OSN IX
Sesi 3: Waterfall
var bawah,samping,n,x,y,z:longint;
x1,y1,x2,y2:longint;
peta:array[0..501,-1..500] of char;
data:array[0..501,-1..500] of int64;
count,temp:int64;

function jatuh(x,y:longint):int64;
var kiri,kanan:longint;
begin
if (data[x,y]=-1) then
begin
if y=500 then data[x,y]:=0
else if peta[x,y+1]='.' then data[x,y]:=0+jatuh(x,y+1)
else if peta[x,y+1]='*' then
begin
kiri:=x-1;
kanan:=x+1;
while((kiri>0)and(peta[kiri,y+1]='*')) do dec(kiri);
while((kanan<=samping)and(peta[kanan,y+1]='*')) do inc(kanan);
data[x,y]:=1+jatuh(kiri,y+1)+jatuh(kanan,y+1);
end;
end;
jatuh:=data[x,y];
end;

begin
readln(bawah,samping,n);
fillchar(peta,sizeof(peta),'.');
for z:=1 to n do
begin
readln(y1,x1,y2,x2);
for y:=y1 to y2 do
for x:=x1 to x2 do peta[x,y]:='*';
end;
for y:=-1 to 500 do
for x:=0 to 500 do data[x,y]:=-1;
count:=0;
for x:=1 to samping do
begin
temp:=jatuh(x,-1);
if temp>count then count:=temp;
end;
writeln(count);
end.

Halaman 14 dari 15
OSN IX
Sesi 3: Password
var hasil,temp:string;
x:longint;

begin
x:=9999;
while (x>=1) do begin
str(x,temp);
while (length(temp)<>4) do
temp:='0'+temp;
writeln(temp);
flush(output);
readln(hasil);
if hasil='pulang' then exit
else
begin
if x mod 2 = 0 then x:=x div 2
else x:=x div 2 + 1;
end;
end;
end.

Halaman 15 dari 15

Anda mungkin juga menyukai