#include <bits/stdc++.h>
using namespace std;
int main() {
/*
1. Pointer/Iterator
* /
int angka;
angka = 1;
int* p;
p = &angka;
cout << angka << endl;
(*p) = 3;
cout << angka << endl;
/*
STL = Standard Template Library
2. STL Containers
- string -> (dynamic) array of char
- vector -> array dinamis
- pair -> 2 data sembarang
- set -> himpunan -> unique, terurut
- map -> pemetaan/fungsi
- stack -> LIFO
- queue -> FIFO
- priority_queue -> autosorted
* /
char cstr[10] = "KOMPUTER"; // array of char
char cstr2[10];
// cstr2 = cstr;
// if(cstr == cstr) {
//
// }
// string
string str = "KOMPUTER";
string str2;
str2 = str;
cout << str2 << endl;
if(str == str2) {
cout << "SAMA" << endl;
}
cout << str.size() << endl;
// vector
int arr[100];
arr[0] = 0;
arr[99] = 0;
vector<int> vec;
cout << vec.size() << endl;
for(int i = 1; i <= 10; i++)
vec.push_back(i);
cout << vec.size() << endl;
for(int i = 0; i < vec.size(); i++)
cout << vec[i] << " ";
cout << endl;
for(auto it = vec.rbegin(); it != vec.rend(); it++)
cout << (*it) << " ";
cout << endl;
// pair
pair<string, int> nilai;
nilai.first = "Ronald";
nilai.second = 100;
double x = 0, y = 0, z = 0;
pair<pair<double, double>, double> koordinat;
koordinat.first.first = x;
koordinat.first.second = y;
koordinat.second = z;
vector<pair<string, int> > vnilai;
vnilai.push_back(nilai);
vnilai.push_back(make_pair("Jono", 30));
// set
set<int> himp;
himp.insert(10);
himp.insert(-1);
himp.insert(3);
himp.insert(3); // sudah ada, jadi diabaikan
cout << "Ukuran himp: " << himp.size() << endl;
if(himp.find(4) != himp.end())
cout << "Angka 4 ditemukan dalam himpunan" << endl;
else
cout << "Angka 4 tidak ditemukan dalam himpunan" << endl;
for(auto it = himp.begin(); it != himp.end(); it++)
cout << (*it) << " ";
cout << endl;
// map
map<string, int> dict;
dict["P0001"] = 0;
dict["P0002"] = 1;
dict["P0003"] = 2;
vector<string> rdict(3);
rdict[0] = "P0001";
rdict[1] = "P0002";
rdict[2] = "P0003";
string IDbaru = "P0004";
if(dict.find(IDbaru) == dict.end()) {
dict[IDbaru] = rdict.size();
rdict.push_back(IDbaru);
}
for(auto it = dict.begin(); it != dict.end(); it++)
cout << (*it).first << " " << it->second << endl;
for(int i = 0; i < rdict.size(); i++)
cout << i << " " << rdict[i] << endl;
// stack -> Last In, First Out
/* 1 2 k 3 4 k 5 k k k
^
.
.
.
.
.
keluar: 2 4 5 3 1
* /
stack<int> st;
st.push(2);
st.push(5);
st.push(3);
st.push(1);
st.push(4);
while(!st.empty()) {
cout << st.top() << " ";
st.pop();
}
cout << endl;
// queue -> First In, First Out
queue<int> qu;
qu.push(2);
qu.push(5);
qu.push(3);
qu.push(1);
qu.push(4);
while(!qu.empty()) {
cout << qu.front() << " ";
qu.pop();
}
cout << endl;
// priority_queue -> autosorted
priority_queue<int> pq;
pq.push(2);
pq.push(5);
pq.push(3);
pq.push(1);
pq.push(4);
while(!pq.empty()) {
cout << pq.top() << " "; // HEAP
pq.pop();
}
cout << endl;
*/
/*
3. STL Functions
- sort -> pair
- next_permutation
- lower_bound
- upper_bound
* /
// sort
int arr[] = {2, 5, 3, 1, 4};
sort(arr, arr+5);
for(int i = 0; i < 5; i++)
cout << arr[i] << " ";
cout << endl;
vector<int> vec = {2, 5, 3, 1, 4};
sort(vec.begin(), vec.end());
for(int i = 0; i < 5; i++)
cout << vec[i] << " ";
cout << endl;
vector<pair<int, int> > koord;
koord.push_back(make_pair(1, 2));
koord.push_back(make_pair(1, 0));
koord.push_back(make_pair(0, 0));
koord.push_back(make_pair(-2, 3));
koord.push_back(make_pair(2, 2));
sort(koord.begin(), koord.end());
for(int i = 0; i < koord.size(); i++)
cout << koord[i].first << " " << koord[i].second << endl;
int arr[] = {1, 2, 3, 3};
do {
cout << arr[0] << " " << arr[1] << " " << arr[2] << " " << arr[3] << endl;
} while(next_permutation(arr, arr+4));
/*
0 1 2 3 3
1 1 3 2 3
2 1 3 3 2
3 2 1 3 3
4 2 3 1 3
5 2 3 3 1
6 3 1 2 3
7 3 1 3 2
8 3 2 1 3
9 3 2 3 1
10 3 3 1 2
11 3 3 2 1
* /
// linear search -> O(n)
// binary search (data sudah urut) -> O(log(n))
// data[] = {1, 1, 2, 2, 2, 3, 5, 5, 8, 9, 11, 13, 15, 16, 16}
// |--------------------|-------------------------|
// |----------|-----------|
// | | |
// |
// cari = 11
// L U
int data[] = {1, 1, 2, 2, 2, 3, 5, 5, 8, 9, 11, 13, 15, 16, 16};
cout << lower_bound(data, data+15, 2)-data << endl;
cout << upper_bound(data, data+15, 2)-data << endl;
*/
return 0;
}
// LATIHAN: https://o...content-available-to-author-only...s.com/contests/ykpjm6
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKCS8qCgkxLiBQb2ludGVyL0l0ZXJhdG9yCgkqIC8KCWludCBhbmdrYTsKCWFuZ2thID0gMTsKCWludCogcDsKCXAgPSAmYW5na2E7Cgljb3V0IDw8IGFuZ2thIDw8IGVuZGw7CgkoKnApID0gMzsKCWNvdXQgPDwgYW5na2EgPDwgZW5kbDsKCS8qCglTVEwgPSBTdGFuZGFyZCBUZW1wbGF0ZSBMaWJyYXJ5CgkyLiBTVEwgQ29udGFpbmVycwoJLSBzdHJpbmcgLT4gKGR5bmFtaWMpIGFycmF5IG9mIGNoYXIKCS0gdmVjdG9yIC0+IGFycmF5IGRpbmFtaXMKCS0gcGFpciAtPiAyIGRhdGEgc2VtYmFyYW5nCgktIHNldCAtPiBoaW1wdW5hbiAtPiB1bmlxdWUsIHRlcnVydXQKCS0gbWFwIC0+IHBlbWV0YWFuL2Z1bmdzaQoJLSBzdGFjayAtPiBMSUZPCgktIHF1ZXVlIC0+IEZJRk8KCS0gcHJpb3JpdHlfcXVldWUgLT4gYXV0b3NvcnRlZAoJKiAvCgljaGFyIGNzdHJbMTBdID0gIktPTVBVVEVSIjsgLy8gYXJyYXkgb2YgY2hhcgoJY2hhciBjc3RyMlsxMF07CgkvLyBjc3RyMiA9IGNzdHI7CgkvLyBpZihjc3RyID09IGNzdHIpIHsKCS8vIAkKCS8vIH0KCQoJCgkvLyBzdHJpbmcKCXN0cmluZyBzdHIgPSAiS09NUFVURVIiOwoJc3RyaW5nIHN0cjI7CglzdHIyID0gc3RyOwoJY291dCA8PCBzdHIyIDw8IGVuZGw7CglpZihzdHIgPT0gc3RyMikgewoJCWNvdXQgPDwgIlNBTUEiIDw8IGVuZGw7Cgl9Cgljb3V0IDw8IHN0ci5zaXplKCkgPDwgZW5kbDsKCQoJLy8gdmVjdG9yCglpbnQgYXJyWzEwMF07CglhcnJbMF0gPSAwOwoJYXJyWzk5XSA9IDA7Cgl2ZWN0b3I8aW50PiB2ZWM7Cgljb3V0IDw8IHZlYy5zaXplKCkgPDwgZW5kbDsKCWZvcihpbnQgaSA9IDE7IGkgPD0gMTA7IGkrKykKCQl2ZWMucHVzaF9iYWNrKGkpOwoJY291dCA8PCB2ZWMuc2l6ZSgpIDw8IGVuZGw7Cglmb3IoaW50IGkgPSAwOyBpIDwgdmVjLnNpemUoKTsgaSsrKQoJCWNvdXQgPDwgdmVjW2ldIDw8ICIgIjsKCWNvdXQgPDwgZW5kbDsKCWZvcihhdXRvIGl0ID0gdmVjLnJiZWdpbigpOyBpdCAhPSB2ZWMucmVuZCgpOyBpdCsrKQoJCWNvdXQgPDwgKCppdCkgPDwgIiAiOwoJY291dCA8PCBlbmRsOwoJCgkvLyBwYWlyCglwYWlyPHN0cmluZywgaW50PiBuaWxhaTsKCW5pbGFpLmZpcnN0ID0gIlJvbmFsZCI7CgluaWxhaS5zZWNvbmQgPSAxMDA7Cglkb3VibGUgeCA9IDAsIHkgPSAwLCB6ID0gMDsKCXBhaXI8cGFpcjxkb3VibGUsIGRvdWJsZT4sIGRvdWJsZT4ga29vcmRpbmF0OwoJa29vcmRpbmF0LmZpcnN0LmZpcnN0ID0geDsKCWtvb3JkaW5hdC5maXJzdC5zZWNvbmQgPSB5OwoJa29vcmRpbmF0LnNlY29uZCA9IHo7CgkKCXZlY3RvcjxwYWlyPHN0cmluZywgaW50PiA+IHZuaWxhaTsKCXZuaWxhaS5wdXNoX2JhY2sobmlsYWkpOwoJdm5pbGFpLnB1c2hfYmFjayhtYWtlX3BhaXIoIkpvbm8iLCAzMCkpOwoJCgkvLyBzZXQKCXNldDxpbnQ+IGhpbXA7CgloaW1wLmluc2VydCgxMCk7CgloaW1wLmluc2VydCgtMSk7CgloaW1wLmluc2VydCgzKTsKCWhpbXAuaW5zZXJ0KDMpOyAvLyBzdWRhaCBhZGEsIGphZGkgZGlhYmFpa2FuCgljb3V0IDw8ICJVa3VyYW4gaGltcDogIiA8PCBoaW1wLnNpemUoKSA8PCBlbmRsOwoJaWYoaGltcC5maW5kKDQpICE9IGhpbXAuZW5kKCkpCgkJY291dCA8PCAiQW5na2EgNCBkaXRlbXVrYW4gZGFsYW0gaGltcHVuYW4iIDw8IGVuZGw7CgllbHNlCgkJY291dCA8PCAiQW5na2EgNCB0aWRhayBkaXRlbXVrYW4gZGFsYW0gaGltcHVuYW4iIDw8IGVuZGw7Cglmb3IoYXV0byBpdCA9IGhpbXAuYmVnaW4oKTsgaXQgIT0gaGltcC5lbmQoKTsgaXQrKykKCQljb3V0IDw8ICgqaXQpIDw8ICIgIjsKCWNvdXQgPDwgZW5kbDsKCQoJLy8gbWFwCgltYXA8c3RyaW5nLCBpbnQ+IGRpY3Q7CglkaWN0WyJQMDAwMSJdID0gMDsKCWRpY3RbIlAwMDAyIl0gPSAxOwoJZGljdFsiUDAwMDMiXSA9IDI7Cgl2ZWN0b3I8c3RyaW5nPiByZGljdCgzKTsKCXJkaWN0WzBdID0gIlAwMDAxIjsKCXJkaWN0WzFdID0gIlAwMDAyIjsKCXJkaWN0WzJdID0gIlAwMDAzIjsKCXN0cmluZyBJRGJhcnUgPSAiUDAwMDQiOwoJaWYoZGljdC5maW5kKElEYmFydSkgPT0gZGljdC5lbmQoKSkgewoJCWRpY3RbSURiYXJ1XSA9IHJkaWN0LnNpemUoKTsKCQlyZGljdC5wdXNoX2JhY2soSURiYXJ1KTsKCX0KCWZvcihhdXRvIGl0ID0gZGljdC5iZWdpbigpOyBpdCAhPSBkaWN0LmVuZCgpOyBpdCsrKQoJCWNvdXQgPDwgKCppdCkuZmlyc3QgPDwgIiAiIDw8IGl0LT5zZWNvbmQgPDwgZW5kbDsKCWZvcihpbnQgaSA9IDA7IGkgPCByZGljdC5zaXplKCk7IGkrKykKCQljb3V0IDw8IGkgPDwgIiAiIDw8IHJkaWN0W2ldIDw8IGVuZGw7CgkKCS8vIHN0YWNrIC0+IExhc3QgSW4sIEZpcnN0IE91dAoJLyogMSAyIGsgMyA0IGsgNSBrIGsgawoJICAgICAgICAgICAgICAgICAgICAgXgoJLgoJLgoJLgoJLgoJLgoJa2VsdWFyOiAyIDQgNSAzIDEKCSogLwoJc3RhY2s8aW50PiBzdDsKCXN0LnB1c2goMik7CglzdC5wdXNoKDUpOwoJc3QucHVzaCgzKTsKCXN0LnB1c2goMSk7CglzdC5wdXNoKDQpOwoJd2hpbGUoIXN0LmVtcHR5KCkpIHsKCQljb3V0IDw8IHN0LnRvcCgpIDw8ICIgIjsKCQlzdC5wb3AoKTsKCX0KCWNvdXQgPDwgZW5kbDsKCS8vIHF1ZXVlIC0+IEZpcnN0IEluLCBGaXJzdCBPdXQKCXF1ZXVlPGludD4gcXU7CglxdS5wdXNoKDIpOwoJcXUucHVzaCg1KTsKCXF1LnB1c2goMyk7CglxdS5wdXNoKDEpOwoJcXUucHVzaCg0KTsKCXdoaWxlKCFxdS5lbXB0eSgpKSB7CgkJY291dCA8PCBxdS5mcm9udCgpIDw8ICIgIjsKCQlxdS5wb3AoKTsKCX0KCWNvdXQgPDwgZW5kbDsKCS8vIHByaW9yaXR5X3F1ZXVlIC0+IGF1dG9zb3J0ZWQKCXByaW9yaXR5X3F1ZXVlPGludD4gcHE7CglwcS5wdXNoKDIpOwoJcHEucHVzaCg1KTsKCXBxLnB1c2goMyk7CglwcS5wdXNoKDEpOwoJcHEucHVzaCg0KTsKCXdoaWxlKCFwcS5lbXB0eSgpKSB7CgkJY291dCA8PCBwcS50b3AoKSA8PCAiICI7IC8vIEhFQVAKCQlwcS5wb3AoKTsKCX0KCWNvdXQgPDwgZW5kbDsKCSovCgkvKgoJMy4gU1RMIEZ1bmN0aW9ucwoJLSBzb3J0IC0+IHBhaXIKCS0gbmV4dF9wZXJtdXRhdGlvbgoJLSBsb3dlcl9ib3VuZAoJLSB1cHBlcl9ib3VuZAoJKiAvCgkvLyBzb3J0CglpbnQgYXJyW10gPSB7MiwgNSwgMywgMSwgNH07Cglzb3J0KGFyciwgYXJyKzUpOwoJZm9yKGludCBpID0gMDsgaSA8IDU7IGkrKykKCQljb3V0IDw8IGFycltpXSA8PCAiICI7Cgljb3V0IDw8IGVuZGw7Cgl2ZWN0b3I8aW50PiB2ZWMgPSB7MiwgNSwgMywgMSwgNH07Cglzb3J0KHZlYy5iZWdpbigpLCB2ZWMuZW5kKCkpOwoJZm9yKGludCBpID0gMDsgaSA8IDU7IGkrKykKCQljb3V0IDw8IHZlY1tpXSA8PCAiICI7Cgljb3V0IDw8IGVuZGw7CgkKCXZlY3RvcjxwYWlyPGludCwgaW50PiA+IGtvb3JkOwoJa29vcmQucHVzaF9iYWNrKG1ha2VfcGFpcigxLCAyKSk7Cglrb29yZC5wdXNoX2JhY2sobWFrZV9wYWlyKDEsIDApKTsKCWtvb3JkLnB1c2hfYmFjayhtYWtlX3BhaXIoMCwgMCkpOwoJa29vcmQucHVzaF9iYWNrKG1ha2VfcGFpcigtMiwgMykpOwoJa29vcmQucHVzaF9iYWNrKG1ha2VfcGFpcigyLCAyKSk7Cglzb3J0KGtvb3JkLmJlZ2luKCksIGtvb3JkLmVuZCgpKTsKCWZvcihpbnQgaSA9IDA7IGkgPCBrb29yZC5zaXplKCk7IGkrKykKCQljb3V0IDw8IGtvb3JkW2ldLmZpcnN0IDw8ICIgIiA8PCBrb29yZFtpXS5zZWNvbmQgPDwgZW5kbDsKCQoJaW50IGFycltdID0gezEsIDIsIDMsIDN9OwoJZG8gewoJCWNvdXQgPDwgYXJyWzBdIDw8ICIgIiA8PCBhcnJbMV0gPDwgIiAiIDw8IGFyclsyXSA8PCAiICIgPDwgYXJyWzNdIDw8IGVuZGw7Cgl9IHdoaWxlKG5leHRfcGVybXV0YXRpb24oYXJyLCBhcnIrNCkpOwoJLyoKMAkxIDIgMyAzCjEJMSAzIDIgMwoyCTEgMyAzIDIKMwkyIDEgMyAzCjQJMiAzIDEgMwo1CTIgMyAzIDEKNgkzIDEgMiAzCjcJMyAxIDMgMgo4CTMgMiAxIDMKOQkzIDIgMyAxCjEwCTMgMyAxIDIKMTEJMyAzIDIgMQoJKiAvCgkvLyBsaW5lYXIgc2VhcmNoIC0+IE8obikKCS8vIGJpbmFyeSBzZWFyY2ggKGRhdGEgc3VkYWggdXJ1dCkgLT4gTyhsb2cobikpCgkvLyBkYXRhW10gPSB7MSwgMSwgMiwgMiwgMiwgMywgNSwgNSwgOCwgOSwgMTEsIDEzLCAxNSwgMTYsIDE2fQoJLy8gICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tfAoJLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwgICB8CgkvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKCS8vIGNhcmkgPSAxMQoJLy8gICAgICAgICAgICAgICAgICBMICAgICAgICBVCglpbnQgZGF0YVtdID0gezEsIDEsIDIsIDIsIDIsIDMsIDUsIDUsIDgsIDksIDExLCAxMywgMTUsIDE2LCAxNn07Cgljb3V0IDw8IGxvd2VyX2JvdW5kKGRhdGEsIGRhdGErMTUsIDIpLWRhdGEgPDwgZW5kbDsKCWNvdXQgPDwgdXBwZXJfYm91bmQoZGF0YSwgZGF0YSsxNSwgMiktZGF0YSA8PCBlbmRsOwoJKi8KCQoJcmV0dXJuIDA7Cn0KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCi8vIExBVElIQU46IGh0dHBzOi8vby4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4ucy5jb20vY29udGVzdHMveWtwam02