diff --git a/10. Subprogram/Faktorisasi Prima.cpp b/10. Subprogram/Faktorisasi Prima.cpp new file mode 100644 index 0000000..8fdbd4f --- /dev/null +++ b/10. Subprogram/Faktorisasi Prima.cpp @@ -0,0 +1,61 @@ +#include + +using namespace std; + +bool cekprima(int a) { + int i=2; + bool prima=1; + + if(a==1) { + prima = 0; + } else if(a==2) { + prima = 1; + } else if((a>2) && ((a%2)==0)) { + prima=0; + } else { + while((i*i)<=a) { + if((a%i)==0) { + prima = 0; + break; + } + i++; + } + } + + return prima; +} + +int main() { + int n,i,pangkat,faktorke=1,m; + + cin>>n; + i=2; + while(i<=n) { + pangkat=0; + if(cekprima(i)) { + while((n%i)==0){ + pangkat++; + n/=i; + } + } + + if(faktorke==1) { + if(pangkat==1) + cout<1) + cout<1) + cout<<" x "< + +using namespace std; + +int abs(int mutlak){ + if(mutlak>=0) { + return mutlak; + } else { + mutlak= mutlak * (-1); + return mutlak; + } +} + +int fungsi(int a, int b, int k, int x) { + int hasil; + if(k>1) { + k--; + hasil=abs((a*x)+b); + fungsi(a,b,k,hasil); + } else if(k==1) { + hasil=abs((a*x)+b); + return hasil; + } +} + +int main() { + int a,b,k,x; + + cin>>a>>b>>k>>x; + + cout< + +using namespace std; + +unsigned int reverse(unsigned int x) { + unsigned int temp = x; + unsigned int ret = 0; + + while (temp > 0) { + ret = (ret * 10) + (temp % 10); + temp = temp / 10; + } + + return ret; +} + +int main() { + unsigned int a,b,c; + + cin>>a>>b; + + c= reverse(a) + reverse(b); + c= reverse(c); + + cout< + +using namespace std; + +int abs(int a) { + if (a>=0) + return a; + else return (a*(-1)); +} + +int pow(int a, int b) { + int n=a; + while (b>1) { + n*=a; + b--; + } + return n; +} + +int kedekatan(int xj, int xi, int yj, int yi, int d) { + return (pow(abs(xj-xi), d)+pow(abs(yj-yi), d)); +} + +int main() { + int n,d,i,j,hasil,terbesar=0,terkecil=0; + int param[1001][3]; + cin>>n>>d; + + for(i=0; i>param[i][j]; + } + } + + for(i=0; iterbesar) + terbesar=hasil; + if(hasil + +int N; +int Q; +int ar[2][1001]; + +void swap(int &a, int &b) { + int temp; + temp=a; + a=b; + b=temp; +} + +int main() { + scanf("%d", &N); + for (int i = 0; i < 2; i++) { + for (int j = 0; j < N; j++) { + scanf("%d", &ar[i][j]); + } + } + + scanf("%d", &Q); + for (int i = 0; i < Q; i++) { + char buff1[5], buff2[5]; + int x, y; + scanf("%s %d %s %d", buff1, &x, buff2, &y); + + int p = buff1[0] - 'A'; + int q = buff2[0] - 'A'; + x--; + y--; + swap(ar[p][x], ar[q][y]); + } + + for (int i = 0; i < 2; i++) { + for (int j = 0; j < N; j++) { + printf("%d", ar[i][j]); + if (j+1 < N) { + printf(" "); + } + } + printf("\n"); + } +} diff --git a/11. String/Bahasa Dengklek.cpp b/11. String/Bahasa Dengklek.cpp new file mode 100644 index 0000000..35cade0 --- /dev/null +++ b/11. String/Bahasa Dengklek.cpp @@ -0,0 +1,20 @@ +#include +#include + +using namespace std; + +int main() { + char s[101]; + int i; + + cin>>s; + for(i=0; i='A') && (s[i]<'a')) + s[i]= s[i]-'A'+'a'; + else s[i]= s[i]-'a'+'A'; + } + + cout< + +using namespace std; + +int main() { + string s; + int k; + ios_base::sync_with_stdio(false); + cin.tie(); + cin>>s; + cin>>k; + for(int i=0; i +#include + +using namespace std; + +void camel(string *mem) { + string s=*mem; + int i; + + for(i=0; i='A') && (s[i]<='Z')) { + s[i]=s[i]-'A'+'a'; + s.insert(i,"_"); + } + } + *mem=s; +} + +void snake(string *mem) { + int ada=0; + int dimana[255]; + string s=*mem; + string und="_"; + int panjang=s.length(); + int temudi=s.find(und); + + while((temudi>=0) && (temudi=s.length())) { + s[dimana[i]]-=32; + } + } + + *mem=s; +} + +int main() { + string s; + string * mem; + mem=&s; + cin>>s; + + if((s.find("_")>=0) && ((s.find("_") +#include + +using namespace std; + +int main() { + string s1,s2,s3,s4; + cin>>s1>>s2>>s3>>s4; + + s1.erase(s1.find(s2), s2.length()); + s1.insert((s1.find(s3)+s3.length()), s4); + + cout< +#include + +using namespace std; + +int main() { + string a,b; + + cin>>a>>b; + while((a.find(b)=0)) { + a.erase(a.find(b), b.length()); + } + cout< + +using namespace std; + +int faktorial(int x) { + if (x == 1) { + return 1; + } else if (x % 2 == 0) { + return x/2 * faktorial(x-1); + } else { + return x * faktorial(x-1); + } +} + +int main() { + int n; + cin>>n; + + cout< +#include + +using namespace std; + +int length; + +bool palindrom(string s) { + if(length==1) { + return 1; + } + if(length==2) { + if(s[0]==s[1]) + return 1; + else return 0; + } + bool masih=(s[0]==s[length-1]); + s.erase(length-1,1); + s.erase(0,1); + length=s.length(); + return masih && palindrom(s); +} + +int main() { + string s; + cin>>s; + length= s.length(); + if(palindrom(s)) + cout<<"YA"< + +using namespace std; + +int a,b,x; + +int abs(int a) { + if (a>=0) + return a; + else return (a*(-1)); +} + +int fungsi(int k){ + if(k==1) + return abs((a*x+b)); + else return abs((a*fungsi(k-1)+b)); +} + +int main() { + int k; + cin>>a>>b>>k>>x; + + cout< + +using namespace std; + +string biner(int N) { + if (N==1) + return "1"; + else if (N % 2 == 1) + return biner(N/2) + "1"; + else + return biner(N/2) + "0"; +} + +int main() { + int N; + cin>>N; + + cout< + +using namespace std; +int N, K; +int catat[1000]; +bool pernah[1000] = {0}; + +void tulis(int kedalaman) { + if(kedalaman >= K) { + bool menaik = true; + for(int i=0; i catat[i+1]) menaik = false; + } + if(menaik) { + for(int i=0; i>N>>K; + tulis(0); + return 0; +} \ No newline at end of file diff --git a/13. Rekursi Lanjut/Jawbreaker I.cpp b/13. Rekursi Lanjut/Jawbreaker I.cpp new file mode 100644 index 0000000..98b352f --- /dev/null +++ b/13. Rekursi Lanjut/Jawbreaker I.cpp @@ -0,0 +1,34 @@ +#include + +using namespace std; + +short movex[] = {0, 0, 1, -1}; +short movey[] = {1, -1, 0, 0}; +int nilai; +short bola[25][25]; +short m, n; + +void count(short x, short y, short ball) { + if((bola[x][y] != ball) || (y < 0) || (x < 0) || (y >= 25) || (x >= 25)) return; + else { + nilai++; + bola[x][y] = -1; + for(int i=0; i < (sizeof(movex) / sizeof(short)); i++) { + count(x + movex[i], y + movey[i], ball); + } + } +} + +int main() { + nilai = 0; + cin>>m>>n; + for(int i=0; i>bola[i][j]; + } + short b, k; + cin>>b>>k; + count(b, k, bola[b][k]); + cout<<((nilai - 1) * nilai)< + +using namespace std; + +void gambar(int n) { + if(n==1) + cout<<"*"<>n; + gambar(n); + + return 0; +} diff --git a/13. Rekursi Lanjut/Permutasi Zig-Zag.cpp b/13. Rekursi Lanjut/Permutasi Zig-Zag.cpp new file mode 100644 index 0000000..73f44ef --- /dev/null +++ b/13. Rekursi Lanjut/Permutasi Zig-Zag.cpp @@ -0,0 +1,37 @@ +#include + +using namespace std; +int N; +int catat[1000]; +bool pernah[1000] = {0}; + +void tulis(int kedalaman) { + if(kedalaman >= N) { + bool zigzag = true; + for(int i=1; i catat[i] && catat[i+1] > catat[i]))) zigzag = false; + } + if(zigzag) { + for(int i=0; i>N; + tulis(0); + return 0; +} \ No newline at end of file diff --git a/13. Rekursi Lanjut/Quadtree I.cpp b/13. Rekursi Lanjut/Quadtree I.cpp new file mode 100644 index 0000000..2ef4f9e --- /dev/null +++ b/13. Rekursi Lanjut/Quadtree I.cpp @@ -0,0 +1,64 @@ +#include + +using namespace std; +int matrix[128][128]; +int kodeindex; +string kode[16384]; + +bool homogen(int r, int c, int size) { + for(int i = r; i < (r + size); i++) { + for(int j = c; j < (c + size); j++) { + if(matrix[r][c] != matrix[i][j]) + return false; + } + } + return true; +} + +bool ispowertwo(int n) { + if(n == 2 || n == 4 || n == 8 || n == 16 || n == 32 || n == 64 || n == 128) return true; + else return false; +} + +void quadtree(int r, int c, int size, string kodenow) { + if(homogen(r, c, size)) { + if(matrix[r][c]) { + kode[kodeindex] = "1" + kodenow; + kodeindex++; + } + } else { + quadtree(r, c, (size >> 1), kodenow + "0"); + quadtree(r, c + (size >> 1), (size >> 1), kodenow + "1"); + quadtree(r + (size >> 1), c, (size >> 1), kodenow + "2"); + quadtree(r + (size >> 1), c + (size >> 1), (size >> 1), kodenow + "3"); + } +} + +int main() { + kodeindex = 0; + int r, c; + cin>>r>>c; + for(int i=0; i>matrix[i][j]; + } + } + int rtemp = r, ctemp = c; + if(!(ispowertwo(r) && ispowertwo(c))) { + while(!ispowertwo(rtemp)) rtemp++; + while(!ispowertwo(ctemp)) ctemp++; + } + for(int i=r; i ctemp) ? rtemp : ctemp); + c = r; + string s; + quadtree(0, 0, r, s); + cout< + +using namespace std; +int matrix[128][128]; +int r, c, n; +string code[128*128]; + +bool ispowertwo(int n) { + if(n == 2 || n == 4 || n == 8 || n == 16 || n == 32 || n == 64 || n == 128) return true; + else return false; +} + +void changeto1(int r, int c, int size, string kode) { + if(kode.length() == 0) { + for(int i = 0; i < size; i++) { + for(int j = 0; j < size; j++) + matrix[i][j] = 1; + } + return; + } + if(kode.length() == 1) { + if(kode == "0") { + for(int i = r; i < (r + (size >> 1)); i++) { + for(int j = c; j < (c + (size >> 1)); j++) + matrix[i][j] = 1; + } + } else if(kode == "1") { + for(int i = r; i < (r + (size >> 1)); i++) { + for(int j = c + (size >> 1); j < (c + size); j++) + matrix[i][j] = 1; + } + } else if(kode == "2") { + for(int i = r + (size >> 1); i < (r + size); i++) { + for(int j = c; j < (c + (size >> 1)); j++) + matrix[i][j] = 1; + } + } else { + for(int i = r + (size >> 1); i < (r + size); i++) { + for(int j = c + (size >> 1); j < (c + size); j++) + matrix[i][j] = 1; + } + } + } else { + char pos = kode[0]; + kode.erase(kode.begin()); + if(pos == '0') changeto1(r, c, (size >> 1), kode); + else if(pos == '1') changeto1(r, c + (size >> 1), (size >> 1), kode); + else if(pos == '2') changeto1(r + (size >> 1), c, (size >> 1), kode); + else changeto1(r + (size >> 1), c + (size >> 1), (size >> 1), kode); + } +} + +int main() { + cin>>n; + for(int i = 0; i < n; i++) + cin>>code[i]; + cin>>r>>c; + int rtemp = r, ctemp = c; + if(!(ispowertwo(r) && ispowertwo(c))) { + while(!ispowertwo(rtemp)) rtemp++; + while(!ispowertwo(ctemp)) ctemp++; + } + rtemp = (ctemp > rtemp) ? ctemp : rtemp; + ctemp = rtemp; + for(int i = 0; i < rtemp; i++) { + for(int j = 0; j < ctemp; j++) + matrix[i][j] = 0; + } + if(n != 0) { + for(int i = 0; i < n; i++) { + code[i].erase(code[i].begin()); + changeto1(0, 0, rtemp, code[i]); + } + } + for(int i = 0; i < r; i++) { + for(int j = 0; j < c; j++) { + cout< + +using namespace std; + +int main() { + string a, b; + cin>>a; + cin>>b; + for(int i=0; i < a.length(); i++) { + string tmp = a; + tmp.erase(i, 1); + if(tmp == b) { + cout<<"Tentu saja bisa!\n"; + return 0; + } + } + cout<<"Wah, tidak bisa :(\n"; + return 0; +} \ No newline at end of file diff --git a/Kompetitif Dasar/01. Perkenalan Pemrograman Kompetitif/Runtuh.cpp b/Kompetitif Dasar/01. Perkenalan Pemrograman Kompetitif/Runtuh.cpp new file mode 100644 index 0000000..a1ddb08 --- /dev/null +++ b/Kompetitif Dasar/01. Perkenalan Pemrograman Kompetitif/Runtuh.cpp @@ -0,0 +1,59 @@ +#include +using namespace std; + +string papan[20]; +string satu, nol; +int r, c; + +bool masihruntuh() { + for(int i=0; i=0) && (berapasatu > 0)); j--) { + berapasatu--; + papan[j][i] = '1'; + } + } +} + +int main() { + ios_base::sync_with_stdio(false); + cin.tie(NULL); + cin>>r>>c; + for(int i=0; i>papan[i]; + for(int i=0; i +#define us unsigned short + +using namespace std; + +typedef struct a { + string id; + us a, b, c; +}peserta; + +void swap(peserta &a, peserta &b) { + peserta tmp = a; + a = b; + b = tmp; +} + +int main() { + ios_base::sync_with_stdio(false); + cin.tie(); + us t; + cin>>t; + for(us i=0; i>n>>m; + string search; + cin>>search; + peserta * olim = new peserta[n]; + for(us j=0; j>olim[j].id>>olim[j].a>>olim[j].b>>olim[j].c; + } + for(us j=0; j olim[j].c) { + swap(olim[k], olim[j]); + } else if(olim[k].c == olim[j].c) { + if(olim[k].b > olim[j].b) { + swap(olim[k], olim[j]); + } else if(olim[k].b == olim[j].b) { + swap(olim[k], olim[j]); + } + } + } + } + bool found = false; + for(us j=0; j + +using namespace std; + +int main() { + string a; + int n; + cin>>a; + cin>>n; + if(a == "*") { + while (n--) { + string tmp; + cin>>tmp; + cout<>tmp; + if(tmp.find(a, (tmp.length() - a.length())) != string::npos) cout<>tmp; + if(tmp.find(a) == 0) cout<>tmp; + if(tmp.length() >= (awal.length() + akhir.length())) { + if((tmp.find(awal) == 0) && (tmp.find(akhir, (tmp.length() - akhir.length())) != string::npos)) + cout< + +using namespace std; + +bool isprime(int n) { + for(int i = 2; i * i <= n; i++) { + if(n % i == 0) return false; + } + return true; +} + +int main() { + int n, nasli, i = 2; + cin>>n; + nasli = n; + while(n > 1) { + while(!isprime(i)) { + i++; + } + if((n != nasli) && (n % i == 0)) cout<<" x "; + int div = 0; + while(n % i == 0) { + div++; + n /= i; + } + if(div == 1) cout< 1) cout< +using namespace std; + +int fpb(int a, int b) { + if(a % b == 0) return b; + else return fpb(b, a % b); +} + +int main() { + int n, gcd, a, b, kpk; + cin>>n; + for(int i=0; i>a; + continue; + } else { + cin>>b; + } + if(i==1) { + if(a > b) gcd = fpb(a, b); + else gcd = fpb(b, a); + kpk = a * b / gcd; + } else if(i > 1) { + if(kpk > b) gcd = fpb(kpk, b); + else gcd = fpb(b, kpk); + kpk = kpk * b / gcd; + } + } + cout< +#define ull unsigned long long +using namespace std; + +ull fpb(ull a, ull b) { + if(a % b == 0) return b; + else return fpb(b, a % b); +} + +int main() { + ull a, b, c, d, gcd, e, f; + cin>>a>>b; + cin>>c>>d; + e =(a * d) + (b * c); + f = b * d; + if(e > f) gcd = fpb(e, f); + else gcd = fpb(f, e); + cout<<(e / gcd)<<" "<<(f / gcd)< +using namespace std; +int prime[77777]; +bool prima[990000]; + +bool isprime(int n) { + for(int i=2; i*i<=n; i++) { + if((n % 2) == 0) return false; + } + return true; +} + +void sieve() { + int in = 0; + memset(prima, true, 990000); + for(int i = 2; i <= 989999; i++) { + if (prima[i]) { + if(isprime(i)) { + prime[in] = i; + in++; + int j = 2; + while ((j * i) <= 989999){ + prima[j * i] = false; + j++; + } + } + } + } +} + +int main() { + ios_base::sync_with_stdio(false); + cin.tie(NULL); + sieve(); + int t; + cin>>t; + while (t--) { + int n; + cin>>n; + cout< +#include +#include + +using namespace std; + +unsigned short quality[100000]; +unsigned int n; + +float median(); + +int main() { + cin>>n; + for(unsigned int i=0; i>quality[i]; + } + sort(quality, quality+n); + cout< +#include +#include + +using namespace std; + +int main() { + int n,x; + int diff[1000]; + cin>>n>>x; + int min = INT_MAX; + int minDiff = INT_MAX; + int coupon[1000]; + for (int i = 0; i>coupon[i]; + diff[i] = abs(x-coupon[i]); + if (diff[i] +#include + +struct beras { + unsigned short w; + unsigned short c; + double CostPerWeight; +}; + +typedef beras Beras; + +using std::cout; +using std::cin; +using std::endl; + +Beras B[1000]; +Beras BSorted[1000]; + +void insertionSort(unsigned short); + +int main() { + unsigned short n; + unsigned int x; + cin>>n>>x; + for(unsigned short i=0; i>B[i].w; + } + for(unsigned short i=0; i>B[i].c; + B[i].CostPerWeight=((double)B[i].c)/B[i].w; + insertionSort(i); + } + unsigned short i=0; + while(x>0 && i0 && BSorted[i-1].CostPerWeight + +using namespace std; + +unsigned n, weight[100000]; +int binarysearchrange(int); + +int main() { + unsigned q, x, y; + cin>>n; + for(unsigned i = 0; i>weight[i]; + } + cin>>q; + for(unsigned i=0; i>x>>y; + cout<n-1) return first; + if(weight[first]>a) { + index=first; + } + } else if(weight[mid]>a) { + last=mid-1; + if(last<0) return 0; + if(weight[last] +#include + +using namespace std; + +unsigned short n; +char nama[500][11]; + +void insertandsort(const char*, unsigned short); +void swap(char*, char*); + +int main() { + cin>>n; + for(unsigned short i = 0; i>tmp; + insertandsort(tmp, i); + } + for(unsigned short i = 0; istrlen(nama[i]) && i>0) { + swap(nama[i-1], nama[i]); + i--; + } + while (strcmp(nama[i-1], nama[i])>0 && i>0) { + if(strlen(nama[i-1])==strlen(nama[i])) { + swap(nama[i-1], nama[i]); + i--; + } else break; + } + } +} + +void swap(char * str1, char* str2) { + char tmp[11]; + strcpy(tmp, str1); + strcpy(str1, str2); + strcpy(str2, tmp); +} \ No newline at end of file diff --git a/Kompetitif Dasar/03. Pencarian dan Pengurutan/Pesta Bebek.cpp b/Kompetitif Dasar/03. Pencarian dan Pengurutan/Pesta Bebek.cpp new file mode 100644 index 0000000..f658077 --- /dev/null +++ b/Kompetitif Dasar/03. Pencarian dan Pengurutan/Pesta Bebek.cpp @@ -0,0 +1,38 @@ +#include +#include + +using namespace std; +char Name[1000][11]; +unsigned short n; + +unsigned short getPos(char *, unsigned short); +void swap(char*, char*); + +int main() { + cin>>n; + for(unsigned short i = 0; i>temp; + cout<0 && i>0) { + swap(Name[i-1], Name[i]); + i--; + } + } + return i; +} + +void swap(char * str1, char* str2) { + char tmp[11]; + strcpy(tmp, str1); + strcpy(str1, str2); + strcpy(str2, tmp); +} \ No newline at end of file diff --git a/Kompetitif Dasar/03. Pencarian dan Pengurutan/Petak Menarik.cpp b/Kompetitif Dasar/03. Pencarian dan Pengurutan/Petak Menarik.cpp new file mode 100644 index 0000000..b72a1b4 --- /dev/null +++ b/Kompetitif Dasar/03. Pencarian dan Pengurutan/Petak Menarik.cpp @@ -0,0 +1,61 @@ +#include + +using std::cout; +using std::cin; +using std::endl; + +unsigned short petak[100][100]; + +int main() { + unsigned short n,m; + unsigned int k; + cin>>n>>m>>k; + for(unsigned short i=0; i>petak[i][j]; + } + } + bool menarik=false; + unsigned short i, j; + for(j=0; j + +using namespace std; + +int main() { + short n,k; + bool height[100001] = {0}; + cin>>n>>k; + for(int i=1; i<=n; i++) { + int arrayIndex; + cin>>arrayIndex; + height[arrayIndex] = 1; + } + short count = 0; + int arrayIndex; + for(int i=1; i<=100000; i++) { + if(height[i] == 1) { + count++; + } else continue; + if(count==k) { + arrayIndex = i; + break; + } + } + cout< +#include + +using namespace std; + +struct phonebook { + char name[11]; + char num[7]; +}; + +typedef struct phonebook Phonebook; +Phonebook PB[100001]; +unsigned int n; + +void searchPhonebook(char *); + +int main() { + unsigned int q; + cin>>n>>q; + for(unsigned int i=1; i<=n; i++) { + cin>>PB[i].name>>PB[i].num; + } + + for(unsigned int i=1; i<=q; i++) { + char search[11]; + cin>>search; + searchPhonebook(search); + } + return 0; +} + +void searchPhonebook(char search[]) { + unsigned int kiri = 1, kanan = n; + char num[7] = "NIHIL"; + while(kiri<=kanan && (strcmp(num, "NIHIL") == 0)) { + unsigned int tengah = (kanan+kiri)/2; + if(strcmp(search, PB[tengah].name) > 0) { + kiri = tengah+1; + } else if (strcmp(search, PB[tengah].name) < 0) { + kanan = tengah-1; + } else { + strcpy(num, PB[tengah].num); + } + } + cout< +#define nextteam valid(a, b + 1) +#define us unsigned short +using namespace std; +us n, score[5] = {0}, scoredata[5] = {0}; + +bool valid(us a, us b) { + bool mungkin = false; + if(a == (n - 1)) { + mungkin = true; + for(us i=0; i>t; + while(t--) { + cin>>n; + for(us i=0; i>score[i]; + if(valid(0,1)) cout<<"YES\n"; + else cout<<"NO\n"; + } + return 0; +} diff --git a/Kompetitif Dasar/04. Brute Force/Jawbreaker II.cpp b/Kompetitif Dasar/04. Brute Force/Jawbreaker II.cpp new file mode 100644 index 0000000..edb1347 --- /dev/null +++ b/Kompetitif Dasar/04. Brute Force/Jawbreaker II.cpp @@ -0,0 +1,41 @@ +#include + +using namespace std; + +short movex[] = {0, 0, 1, -1}; +short movey[] = {1, -1, 0, 0}; +int nilai, maks; +bool visited[25][25] = {0}; +short bola[25][25]; +short m, n; + +void count(short x, short y, short ball) { + if((bola[x][y] != ball) || visited[x][y] || (y < 0) || (x < 0) || (y >= 25) || (x >= 25)) return; + else { + nilai++; + visited[x][y] = true; + for(int i=0; i < (sizeof(movex) / sizeof(short)); i++) { + count(x + movex[i], y + movey[i], ball); + } + } +} + +int main() { + maks = -1; + cin>>m>>n; + for(int i=0; i>bola[i][j]; + } + for(int i=0; i maks) maks = nilai; + } + } + } + cout<<((maks - 1) * maks)< +#define sizebool(x) (sizeof(x)/sizeof(bool)) +#define sizeshort(x) (sizeof(x)/sizeof(short)) +#define set0(x, z) memset(x, 0, z) +using namespace std; + +short movex[] = {0, 0, 1, -1}, movey[] = {1, -1, 0, 0}, m, n; +int nilai, maks = -1; + +void count(short x, short y, short ball, short bola[25][25], bool visited[25][25], bool runtuhkan) { + if((bola[x][y] != ball) || ((runtuhkan) ? false : visited[x][y]) || (y < 0) || (x < 0) || (y >= 25) || (x >= 25)) return; + else { + nilai++; + if(runtuhkan) bola[x][y] = -1; + else visited[x][y] = true; + for(int i=0; i < sizeshort(movex); i++) { + count(x + movex[i], y + movey[i], ball, bola, visited, runtuhkan); + } + } +} + +void runtuh(short bola[25][25]) { + for(int i=0; i>m>>n; + for(int i=0; i>bola[i][j]; + } + for(int i=0; i maks) { + maks = nilai; + x = i; + y = j; + } + } + } + } + set0(visited, sizebool(visited)); + count(x, y, bola[x][y], bola, visited, true); + runtuh(bola); + printmatrix(bola); + return 0; +} \ No newline at end of file diff --git a/Kompetitif Dasar/04. Brute Force/Jawbreaker IV.cpp b/Kompetitif Dasar/04. Brute Force/Jawbreaker IV.cpp new file mode 100644 index 0000000..92806ec --- /dev/null +++ b/Kompetitif Dasar/04. Brute Force/Jawbreaker IV.cpp @@ -0,0 +1,86 @@ +#include +using namespace std; +short movex[] = {0, 0, 1, -1}, movey[] = {1, -1, 0, 0}, m, n; +int nilai; + +void count(short x, short y, short ball, short bola[25][25], bool visited[25][25], bool marked) { + if((bola[x][y] != ball) || (visited[x][y])|| (y < 0) || (x < 0) || (y >= n) || (x >= m)) return; + else { + nilai++; + if(marked) bola[x][y] = -1; + visited[x][y] = true; + for(int i=0; i < 4; i++) { + count(x + movex[i], y + movey[i], ball, bola, visited, marked); + } + } +} + +void runtuh(short bola[25][25]) { + for(int i=0; i max) ? nilai : max; + } + } + return max; +} + +int main() { + bool visited[25][25] = {0}; + short bola[25][25] = {0}; + int maks = 0, x, y; + cin>>m>>n; + for(int i=0; i>bola[i][j]; + } + short ball[25][25]; + for(int i=0; i maks) ? tmp : maks; + } + } + cout< +using namespace std; +typedef struct dance { + int d; + char t; +}tarian; +int ksum[3628800] = {0}, indx = 0, y, r, n; +tarian bebek[10]; +bool pernah[10] = {}; + +void compute(int t, int k, int now, char before, bool yakin) { + if(t == r) { + ksum[indx] = k; + indx++; + return; + } + for(int i=0; i>= 1; + if(yakin) tmp += y; + pernah[i] = true; + compute(t + 1, k + tmp, i, bebek[i].t, (bebek[i].t == 'Y' || yakin)); + pernah[i] = false; + } +} + +int binsearch(int left, int right, int n) { + if(left == right || (((right - left) == 1) && (ksum[right] > n))) return left; + if(((right - left) == 1) && (ksum[right] <= n)) return right; + int mid = left + ((right - left) >> 1); + if(ksum[mid] == n) { + if(ksum[mid + 1] > n) return mid; + return binsearch(mid + 1, right, n); + } + else if(ksum[mid] > n) return binsearch(left, mid, n); + else return binsearch(mid, right, n); +} + +int main() { + int j, h; + scanf("%*s %*d"); + cin>>n>>r>>y>>j; + for(int i=0; i>bebek[i].d>>bebek[i].t; + } + for(int i=0; i>h; + if(h > ksum[indx - 1]) { + cout<<0<<'\n'; + continue; + } + if(h < ksum[0]) { + cout< +using namespace std; +int m, n, *freq, periode; +bool *batas, ketemu = false; +void resetbatas() { + for(int i=0; i=0; i--) { + if(batas[i]) { + if(i == 0 || ((m - i) != periode && (m - i) != (periode + 1))) + return false; + break; + } + } + return true; +} + +void setbatas(int indexbatas, int jumlahbatas) { + if(ketemu) return; + batas[indexbatas] = true; + if(jumlahbatas == (n - 1)) { + ketemu = cekbatas(); + if(!ketemu) batas[indexbatas] = false; + return; + } + setbatas(indexbatas + periode, jumlahbatas + 1); + setbatas(indexbatas + periode + 1, jumlahbatas + 1); + if(!ketemu) batas[indexbatas] = false; +} + +int main() { + cin>>m; + freq = new int[m]; + batas = new bool[m]; + resetbatas(); + for(int i=0; i>freq[i]; + cin>>n; + sort(freq, freq + m); + periode = (m / n); + if((m % n) == 0) { + for(int i=periode; i + +using namespace std; + +unsigned short matrixa[75][75],matrixb[75][75], xa,ya,xb,yb; + +bool identik() { + if(xa!=xb || ya!=yb) return 0; + else { + for(unsigned short i=0; i>xa>>ya; + for(unsigned short i=0; i>matrixa[i][j]; + } + } + cin>>xb>>yb; + for(unsigned short i=0; i>matrixb[i][j]; + } + } + if(identik()) cout<<"identik"< +using namespace std; +#define ll long long +ll baris[100000] = {0}, y; + +ll binsearch(ll left, ll right) { + if(left == right || (((right - left) == 1) && (baris[right] > y))) return left; + if(((right - left) == 1) && (baris[right] <= y)) return right; + ll mid = left + ((right - left) >> 1); + if(baris[mid] == y) return mid; + else if(baris[mid] > y) return binsearch(left, mid); + else return binsearch(mid, right); +} + +int main() { + int n, q; + ios_base::sync_with_stdio(false); + cin.tie(NULL); + cin>>n; + baris[0] = 1; + for(int i=1; i<=n; i++) { + cin>>baris[i]; + baris[i] += baris[i - 1]; + } + cin>>q; + while(q--) { + cin>>y; + cout< +#define ll long long +using namespace std; +ll n; + +ll bigpower(ll a, ll b) { + if(a == 0) return 0; + if(b == 0) return 1; + if(b & 1) return ((bigpower(a, b - 1) % n) * (a % n) % n); + else { + a = bigpower(a, (b >> 1)) % n; + return (a * a) % n; + } +} + +ll hadiah(ll a, ll b, ll c) { + if(a == 0) return 0; + if(a == 1 || b == 0) return 1; + if(b == 1 || c == 0) return a % n; + if(c == 1) return bigpower(a, b); + return bigpower(hadiah(a, b, c - 1) % n, b); +} + +int main() { + ll a, b, c; + ios_base::sync_with_stdio(false); + cin.tie(NULL); + cin>>a>>b>>c>>n; + cout< +using namespace std; +#define mod 1000000 + +long long bigpower(long long a, long long b) { + if(a == 0) return 0; + if(b == 0) return 1; + if(b & 1) return ((bigpower(a, b - 1) % mod) * (a % mod) % mod); + else { + a = bigpower(a, (b >> 1)) % mod; + return (a * a) % mod; + } +} + +int main() { + long long a, b; + ios_base::sync_with_stdio(false); + cin.tie(NULL); + cin>>a>>b; + long long res = bigpower(a % mod, b); + if(pow(a, b) >= mod) { + long long tmp = res; + short digit = 0; + if(tmp == 0) digit = 1; + for(;tmp > 0; digit++, tmp /= 10); + digit = 6 - digit; + while (digit--) cout<<0; + cout< +using namespace std; +#define ull unsigned long long +ull n, m, a[262144] = {0}, pos = 0, low_bound = 0, up_bound = UINT64_MAX; +ull product(ull supply) { + ull sum = 0; + for(int i=0; i> 1), sum = product(mid); + if(sum > m) { + right = mid - 1; + } else if(sum < m) { + left = mid + 1; + } else { + if(product(mid - 1) < m) { + low_bound = mid; + break; + } + else right = mid - 1; + } + } + left = low_bound, right = UINT64_MAX; + while (left <= right) { + ull mid = left + ((right - left) >> 1), sum = product(mid); + if(sum > m) { + right = mid - 1; + } else if(sum < m) { + left = mid + 1; + } else { + if(product(mid + 1) > m) { + up_bound = mid; + return; + } + else left = mid + 1; + } + } +} + +int main() { + ios_base::sync_with_stdio(false); + cin.tie(); + cin>>n>>m; + for(int i=0; i>a[i]; + binsearch(1, UINT64_MAX); + cout< +using namespace std; +typedef struct coklat { + unsigned long long h, b; + bool operator < (const coklat &a) const { return h < a.h; }; +}cc; + +int main() { + cc arr[100000]; + unsigned long long d, total = 0, n; + cin>>n>>d; + for(int i=0; i < n; i++) + cin>>arr[i].h>>arr[i].b; + sort(arr, arr + n); + for(int i=0; i < n; i++) { + unsigned long long bought = (arr[i].b * arr[i].h <= d) ? arr[i].b : (d / arr[i].h); + d -= (bought * arr[i].h); + total += bought; + } + cout< +using namespace std; +typedef struct friends { + int start, endtime; + bool operator < (const teman &a) const { return endtime < a.endtime; }; +}teman; + +int main() { + teman a[100000]; + int n, start = 0, invited = 0; + cin>>n; + for(int i=0; i>a[i].start>>a[i].endtime; + a[i].endtime += a[i].start - 1; + } + sort(a, a + n); + for(int i=0; i < n; i++) { + if(a[i].start > start) { + invited++; + start = a[i].endtime; + } + } + cout< +using namespace std; +typedef unsigned long long ull; +typedef long long ll; +typedef struct pelat { + ull nomor, harga; +}plat; +ull n, duit; +plat * calon_sorted, * calon; +int * terbeli; + +bool compVal(plat a, plat b) { + if(a.harga == b.harga) + return a.nomor > b.nomor; + return a.harga < b.harga; +} + +void beliPlat(ull start, ull end, bool isSaveToArray = false) { + for(ull i=start; i=0; j--) { + if(calon[j].harga <= duit) { + duit -= calon[j].harga; + if(isSaveToArray) terbeli[i] = j; + cout< duit); + if(isinyanol || n == 0) { + cout<<"1\n0\n0\n"; + return; + } + ull length = ((duit - murahbukannol) / termurah) + 1; + cout<=0; i--) { + ull currentprice = calon[i].harga + termurah; + if(currentprice <= duit) { + duit -= currentprice; + if(length < 100) terbeli[0] = i; + cout<= 100) { + beliPlat(1, 50); + ull takterprint = (length - 100), terbelinonprint = 0; + for(int i=n; i>=0 && duit > 0 && (terbelinonprint < takterprint); i--) { + if(calon[i].harga == 0) break; + ull buy = (duit/calon[i].harga); + if((terbelinonprint + buy) > takterprint) + buy = (takterprint - terbelinonprint); + terbelinonprint += buy; + buy *= calon[i].harga; + duit -= ((duit > buy) ? buy : duit); + } + beliPlat(0, 50); + } +} + +int main() { + cin>>n; + calon_sorted = new plat[n + 1], calon = new plat[n + 1]; + for(ull i=0; i<=n; i++){ + calon_sorted[i].nomor = i; + calon[i].nomor = i; + cin>>calon_sorted[i].harga; + calon[i].harga = calon_sorted[i].harga; + } + cin>>duit; + sort(calon_sorted, calon_sorted + n + 1, compVal); + if(calon_sorted[0].harga > duit) + cout<<"0\n"; + else + getPlat(); + return 0; +} \ No newline at end of file diff --git a/Kompetitif Dasar/06. Greedy/Perkalian skalar.cpp b/Kompetitif Dasar/06. Greedy/Perkalian skalar.cpp new file mode 100644 index 0000000..46fbe9c --- /dev/null +++ b/Kompetitif Dasar/06. Greedy/Perkalian skalar.cpp @@ -0,0 +1,18 @@ +#include +using namespace std; + +int main() { + int n, x[10000], y[10000]; + cin>>n; + for(int i=0; i < n; i++) + cin>>x[i]; + for(int i=0; i < n; i++) + cin>>y[i]; + sort(x, x + n); + sort(y, y + n, greater()); + long long sum = 0; + for(int i=0; i < n; i++) + sum += (long long)x[i] * y[i]; + cout< +using namespace std; + +int main() { + int n, b, arr[20000], i, sum = 0; + cin>>n>>b; + for(i=0; i>arr[i]; + sort(arr, arr + n); + while(sum < b) sum += arr[--i]; + cout<<(n - i)<<'\n'; + return 0; +} \ No newline at end of file diff --git a/Kompetitif Dasar/06. Greedy/Sepatu.cpp b/Kompetitif Dasar/06. Greedy/Sepatu.cpp new file mode 100644 index 0000000..6bb4cc5 --- /dev/null +++ b/Kompetitif Dasar/06. Greedy/Sepatu.cpp @@ -0,0 +1,24 @@ +#include +using namespace std; + +int main() { + short kaki[10001] = {0}, n, m, tmp, used = 0; + cin>>n>>m; + short *sepatu = new short[m]; + for(short i=0; i>tmp; + kaki[tmp]++; + } + for(short i=0; i>sepatu[i]; + sort(sepatu, sepatu + m); + while(--m >= 0) { + tmp = sepatu[m]; + if(kaki[tmp] > 0 || kaki[tmp - 1] > 0) { + kaki[((kaki[tmp] > 0) ? tmp : (tmp - 1))]--; + used++; + } + } + cout< +using namespace std; +typedef long long ll; +bool filled[50000] = {0}; +ll dp[50000] = {0}; +unsigned short n, k, coin[500]; + +ll tukar(int x) { + if(x == 0) return 0; + if(filled[x - 1]) return dp[x - 1]; + if(x < coin[0]) { + filled[x - 1] = true; + dp[x - 1] = INT_MAX; + } + ll min = INT_MAX; + for(unsigned short i=0; i>n; + for(short i=0; i>coin[i]; + cin>>k; + ll val = tukar(k); + cout<<((val >= INT_MAX) ? -1 : val)<<'\n'; + return 0; +} \ No newline at end of file diff --git a/Kompetitif Dasar/08. Struktur Data Dasar/Modified Queue.cpp b/Kompetitif Dasar/08. Struktur Data Dasar/Modified Queue.cpp new file mode 100644 index 0000000..211a391 --- /dev/null +++ b/Kompetitif Dasar/08. Struktur Data Dasar/Modified Queue.cpp @@ -0,0 +1,49 @@ +#include +using namespace std; +typedef struct queuemember { + int number = 0, banyak = 0; +}member; + +int main() { + vector modqueue; + int n, queue_size = 0; + ios_base::sync_with_stdio(false); + cin.tie(NULL); + cin>>n; + while(n--) { + string cmd; + cin>>cmd; + if(cmd == "add") { + member tmp; + cin>>tmp.number>>tmp.banyak; + queue_size += tmp.banyak; + modqueue.push_back(tmp); + cout<>y; + cout< 0) { + int elemenawal = modqueue[0].banyak; + modqueue[0].banyak -= y; + if(modqueue[0].banyak <= 0) + modqueue.erase(modqueue.begin()); + y -= elemenawal; + } + } + } else { + vector tmpqueue; + for(int i=(modqueue.size() - 1); i >= 0; i--) + tmpqueue.push_back(modqueue[i]); + for(int i=0; i +using namespace std; +typedef struct StackMember { + int nomor, banyak; +} member; + +int main() { + vector modstack; + int n, isinya = 0; + ios_base::sync_with_stdio(false); + cin.tie(NULL); + cin>>n; + while(n--) { + string command; + cin>>command; + if(command == "add") { + member tmp; + cin>>tmp.nomor>>tmp.banyak; + isinya += tmp.banyak; + cout<>y; + cout< 0) { + int elemenakhir = modstack[modstack.size() - 1].banyak; + modstack[modstack.size() - 1].banyak -= y; + if(modstack[modstack.size() - 1].banyak <= 0) + modstack.erase(modstack.end() - 1); + y -= elemenakhir; + } + } + } else if(command == "dex") { + int x; + cin>>x; + for(int i=0; i < modstack.size(); i++) + modstack[i].nomor -= x; + } else { + int x; + cin>>x; + for(int i=0; i < modstack.size(); i++) + modstack[i].nomor += x; + } + } + return 0; +} \ No newline at end of file diff --git a/Kompetitif Dasar/08. Struktur Data Dasar/Stack dan Queue.cpp b/Kompetitif Dasar/08. Struktur Data Dasar/Stack dan Queue.cpp new file mode 100644 index 0000000..0ae6130 --- /dev/null +++ b/Kompetitif Dasar/08. Struktur Data Dasar/Stack dan Queue.cpp @@ -0,0 +1,30 @@ +#include +using namespace std; + +int main() { + int n; + vector snq; + ios_base::sync_with_stdio(false); + cin.tie(NULL); + cin>>n; + while(n--) { + string cmd; + cin>>cmd; + if(cmd == "push_back") { + int tmp; + cin>>tmp; + snq.push_back(tmp); + } else if(cmd == "push_front") { + int tmp; + cin>>tmp; + if(snq.empty()) snq.push_back(tmp); + else snq.emplace(snq.begin(), tmp); + } else if(cmd == "pop_front") + snq.erase(snq.begin()); + else + snq.pop_back(); + } + for(int i=0; i < snq.size(); i++) + cout<