Learn C++ STL

lesson ā§§ / ⧝ ¡ āϝ⧇ algorithm-āϗ⧁āϞ⧋ āĻĒā§āϰāϤāĻŋ āϏāĻĒā§āϤāĻžāĻšā§‡āχ āϞāĻžāĻ—āĻŦ⧇: accumulate āĻĨ⧇āϕ⧇ nth_element

Module ā§§ā§Ē ¡ āϝ⧇ algorithm-āϗ⧁āϞ⧋ āĻĒā§āϰāϤāĻŋ āϏāĻĒā§āϤāĻžāĻšā§‡āχ āϞāĻžāĻ—āĻŦ⧇: accumulate āĻĨ⧇āϕ⧇ nth_element

Algorithm: āĻāĻ•āϟāĻž loop-āĻāϰ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āĻāĻ•āϟāĻž call, āφāϰ āĻāĻ•āϟāĻž set-āĻāϰ āĻĒā§āϰāϤāĻŋāϟāĻž āĻ•ā§āϰāĻŽ

FreeāĻĒāĻĄāĻŧāĻž

āĻāχ lesson-āĻ āϝāĻž āĻļāĻŋāĻ–āĻŦ⧇

  • āĻŽā§‹āϟ āϝ⧋āĻ—āĻĢāϞ, āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ āĻŽāĻžāύ, āĻ•āϝāĻŧāϟāĻž āφāϛ⧇ āĻ—ā§‹āύāĻž āφāϰ āωāĻ˛ā§āĻŸā§‡ āĻĻ⧇āĻ“āϝāĻŧāĻžāϰ āĻšāĻžāϤ⧇ āϞ⧇āĻ–āĻž loop-āϗ⧁āϞ⧋āϰ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ accumulate, max_element, count āφāϰ reverse āĻŦāϏāĻžāϤ⧇ āĻĒāĻžāϰāĻŦ⧇, āĻĒā§āϰāϤāĻŋāϟāĻž āĻāĻ•āϟāĻž range [first, last)-āĻāϰ āωāĻĒāϰāĨ¤
  • sort āφāϰ next_permutation-āϕ⧇ āϘāĻŋāϰ⧇ āĻāĻ•āϟāĻž do-while āĻĻāĻŋāϝāĻŧ⧇ āĻāĻ•āϟāĻž set-āĻāϰ āĻĒā§āϰāϤāĻŋāϟāĻž āĻ•ā§āϰāĻŽ āϘ⧁āϰ⧇ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰāĻŦ⧇, āφāϰ āĻŦ⧁āĻāĻŋāϝāĻŧ⧇ āĻŦāϞāϤ⧇ āĻĒāĻžāϰāĻŦ⧇ sort āϕ⧇āύ āφāϗ⧇ āϞāĻžāϗ⧇āĨ¤
  • āωāĻ¤ā§āϤāϰāϟāĻž āϝ⧇ type-āĻ āĻĻāϰāĻ•āĻžāϰ, āϏ⧇āχ āĻšāĻŋāϏ⧇āĻŦ⧇ accumulate-āĻāϰ āĻļ⧁āϰ⧁āϰ āĻŽāĻžāύ 0, 0LL āύāĻžāĻ•āĻŋ 0.0 āĻšāĻŦ⧇, āĻŦ⧇āϛ⧇ āύāĻŋāϤ⧇ āĻĒāĻžāϰāĻŦ⧇, āφāϰ āĻĒā§āϰāϤāĻŋāϟāĻž call-āĻāϰ āĻ–āϰāϚ āĻŦāϞāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āĨ¤

Bob āĻŦāĻ¨ā§āϧ⧁āĻĻ⧇āϰ āĻāĻ•āϟāĻž āĻ›āĻŦāĻŋāϰ āϜāĻ¨ā§āϝ āĻāĻ• āϏāĻžāϰāĻŋ āĻšā§‡āϝāĻŧāĻžāϰ⧇ āĻŦāϏāĻžāĻšā§āϛ⧇, āφāϰ āϏ⧇ āĻĒā§āϰāϤāĻŋāϟāĻž āĻŦāϏāĻžāϰ āĻ•ā§āϰāĻŽ āĻāĻ•āĻŦāĻžāϰ āĻ•āϰ⧇ āĻĻ⧇āĻ–āϤ⧇ āϚāĻžāϝāĻŧāĨ¤ āϤāĻŋāύāϜāύ āĻŦāĻ¨ā§āϧ⧁āϰ āϜāĻ¨ā§āϝ āϏ⧇ āϞ⧇āϖ⧇ āϤāĻŋāύāϟāĻž nested loop, āĻ›āϝāĻŧāϜāύ⧇āϰ āϜāĻ¨ā§āϝ āĻ›āϝāĻŧāϟāĻžāĨ¤ āϤāĻžāϰāĻĒāϰ Maria āĻŦāϞ⧇, āĻ•āϝāĻŧāϜāύ āφāϏāĻŦ⧇ āϕ⧇āω āϜāĻžāύ⧇ āύāĻž, āφāϰ loop-āĻāϰ āϕ⧋āύ⧋ āĻŦāĻžāρāϧāĻž āϏāĻ‚āĻ–ā§āϝāĻž āĻĻāĻŋāϝāĻŧ⧇ āϏ⧇āϟāĻž āĻšāϝāĻŧ āύāĻžāĨ¤ āĻĻāĻŋāύāĻļ⧇āώ⧇ Amara āϜāĻžāύāϤ⧇ āϚāĻžāϝāĻŧ cafÊ-āϰ āĻŽā§‹āϟ āĻŦāĻŋāĻ•ā§āϰāĻŋ, āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻ­āĻžāϞ⧋ āϘāĻŖā§āϟāĻžāϟāĻž, āφāϰ āĻ•āϝāĻŧ āϘāĻŖā§āϟāĻžāϝāĻŧ āĻ āĻŋāĻ• 30 āĻ•āĻžāĻĒ āĻŦāĻŋāĻ•ā§āϰāĻŋ āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ Bob āφāϰāĻ“ āϤāĻŋāύāϟāĻž loop āϞ⧇āϖ⧇, āφāϰ āϤāĻžāϰ āĻāĻ•āϟāĻž āĻļ⧁āϰ⧁ āĻšāϝāĻŧ index 0-āϰ āĻŦāĻĻāϞ⧇ 1 āĻĨ⧇āϕ⧇āĨ¤

āĻāχ āĻĒā§āϰāϤāĻŋāϟāĻž āĻ•āĻžāϜ standard library-āϤ⧇ āĻŽāĻžāĻ¤ā§āϰ āĻāĻ•āϟāĻž callāĨ¤ āĻāχ lesson āĻĻ⧇āĻ–āĻžāĻŦ⧇ call-āϗ⧁āϞ⧋ āϕ⧀, āĻ“āϰāĻž āĻāĻ•āϟāĻž container-āϕ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻĻ⧇āϖ⧇, āφāϰ āĻĒā§āϰāϤāĻŋāϟāĻžāϰ āĻ–āϰāϚ āĻ•āϤāĨ¤

Algorithm āĻšāϞ⧋ āĻāĻŽāύ āĻāĻ•āϟāĻž function, āϝ⧇āϟāĻž āĻāĻ•āϟāĻž range āύ⧇āϝāĻŧ

STL-āĻ āĻāĻ•āϟāĻž algorithm āĻšāϞ⧋ āĻāĻŽāύ āĻāĻ•āϟāĻž function, āϝ⧇āϟāĻž āĻ•āĻžāϜ āĻ•āϰ⧇ element-āĻāϰ āĻāĻ•āϟāĻž range-āĻāϰ āωāĻĒāϰ, āĻĒ⧁āϰ⧋ container-āĻāϰ āωāĻĒāϰ āύāĻžāĨ¤ āϤ⧁āĻŽāĻŋ āĻ“āϰ āĻšāĻžāϤ⧇ Module 11-āĻāϰ āĻĻ⧁āχāϟāĻž iterator āĻĻāĻžāĻ“, first āφāϰ lastāĨ¤ āĻ“ first āĻĨ⧇āϕ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧇ āĻĒāϰ⧇āϰ āĻĒā§āϰāϤāĻŋāϟāĻž element āύ⧇āϝāĻŧ, last āĻĒāĻ°ā§āϝāĻ¨ā§āϤ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻ“āϟāĻžāϕ⧇ āύāĻŋāĻœā§‡ āύ⧇āϝāĻŧ āύāĻžāĨ¤ āĻāϟāĻžāϕ⧇āχ āĻŦāϞ⧇ half-open range [first, last)āĨ¤

āϝ⧇ algorithm-āϗ⧁āϞ⧋ āĻšāĻŋāϏāĻžāĻŦ-āύāĻŋāĻ•āĻžāĻļ āĻ•āϰ⧇, āϝ⧇āĻŽāύ accumulate, āĻ“āϰāĻž āĻĨāĻžāϕ⧇ <numeric> header-āĻāĨ¤ āĻŦāĻžāĻ•āĻŋāϰāĻž, āϝ⧇āĻŽāύ count, max_element, reverse āφāϰ next_permutation, āĻĨāĻžāϕ⧇ <algorithm>-āĻāĨ¤ āύāĻŋāĻšā§‡ āĻĻ⧁āχāϟāĻž call āφāϛ⧇, āĻĒā§āϰāϤāĻŋāϟāĻž āĻāĻ•āĻŦāĻžāϰ āĻĒ⧁āϰ⧋ vector-āĻāϰ āωāĻĒāϰ, āφāϰ⧇āĻ•āĻŦāĻžāϰ āĻ“āϰ āĻāĻ•āϟāĻž āĻ…āĻ‚āĻļ⧇āϰ āωāĻĒāϰāĨ¤

#include <algorithm>
#include <iostream>
#include <numeric>
#include <vector>
using namespace std;

int main() {
    vector<int> sold{4, 7, 2, 9, 5, 7};
    cout << accumulate(sold.begin(), sold.end(), 0) << '\n';
    cout << accumulate(sold.begin() + 1, sold.begin() + 4, 0) << '\n';
    cout << count(sold.begin(), sold.end(), 7) << '\n';
    cout << count(sold.begin(), sold.begin() + 3, 7) << '\n';
    return 0;
}
34
18
2
1

āĻĒ⧁āϰ⧋ vector āϝ⧋āĻ— āĻ•āϰāϞ⧇ āĻšāϝāĻŧ 34āĨ¤ sold.begin() + 1 āĻĨ⧇āϕ⧇ sold.begin() + 4 āϧāϰ⧇ position 1, 2 āφāϰ 3, āϤāĻžāχ āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧ āϞāĻžāχāύāϟāĻž 7 + 2 + 9 = 18āĨ¤ count āĻĒ⧁āϰ⧋ vector-āĻ āĻĻ⧁āχāϟāĻž 7 āĻĒ⧇āϝāĻŧ⧇āϛ⧇, āφāϰ āĻĒā§āϰāĻĨāĻŽ āϤāĻŋāύāϟāĻž position-āĻ āĻĒ⧇āϝāĻŧ⧇āϛ⧇ āĻāĻ•āϟāĻžāĨ¤

āĻāĻ•āϟāĻž vector-āĻāϰ āωāĻĒāϰ āĻĻ⧁āχāϟāĻž half-open range āĻāĻ•āϟāĻž vector, āĻĻ⧁āχāϟāĻž range: āĻĒ⧁āϰ⧋āϟāĻž, āφāϰ position 1 āĻĨ⧇āϕ⧇ 3 0 1 2 3 4 5 end() 4 7 2 9 5 7 sold.begin() āĻĨ⧇āϕ⧇ sold.end(): 4 + 7 + 2 + 9 + 5 + 7 = 34 sold.begin() + 1 āĻĨ⧇āϕ⧇ sold.begin() + 4: 7 + 2 + 9 = 18 last āĻ•āĻ–āύ⧋ āύ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ āύāĻž: position 4 āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧ range-āĻāϰ āĻŦāĻžāχāϰ⧇, āφāϰ end()-āĻ āϕ⧋āύ⧋ element āύ⧇āχāĨ¤
āĻ›āĻŦāĻŋ 1āĨ¤ āĻāĻ•āϟāĻž range āĻšāϞ⧋ [first, last): first āύ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ, last āύāĻžāĨ¤ āĻĒ⧁āϰ⧋ vector-āϟāĻžāĻ“ āĻāĻ•āϟāĻž range, āφāϰ āĻ“āϰ position 1 āĻĨ⧇āϕ⧇ 3-āĻ“ āĻāĻ•āϟāĻž rangeāĨ¤

āϤāĻžāχ āĻāĻ•āχ call āĻĒ⧁āϰ⧋ vector-āĻāϰ āωāĻĒāϰāĻ“ āϚāϞ⧇, āφāĻŦāĻžāϰ āĻ“āϰ āϝ⧇āϕ⧋āύ⧋ āĻāĻ•āϟāĻž āĻ…āĻ‚āĻļ⧇āϰ āωāĻĒāϰāĻ“ āϚāϞ⧇; āĻŦāĻĻāϞāĻžāϝāĻŧ āĻļ⧁āϧ⧁ iterator āĻĻ⧁āχāϟāĻžāĨ¤

āϝ⧇ āϚāĻžāϰāϟāĻž loop āφāϰ āϞāĻŋāĻ–āϤ⧇ āĻšāĻŦ⧇ āύāĻž

āĻāχ āĻšāϞ⧋ Amara-āϰ āĻĻāĻŋāύāĻļ⧇āώ⧇āϰ āĻšāĻŋāϏāĻžāĻŦ: āĻĒāĻžāρāϚ āϘāĻŖā§āϟāĻžāϰ āĻĒā§āϰāϤāĻŋāϟāĻžāϝāĻŧ āĻ•āϝāĻŧ āĻ•āĻžāĻĒ āĻŦāĻŋāĻ•ā§āϰāĻŋ āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ Program-āϟāĻž āĻĒā§āϰāϤāĻŋāϟāĻž āĻĒā§āϰāĻļā§āύ⧇āϰ āωāĻ¤ā§āϤāϰ āĻĻ⧁āχāĻŦāĻžāϰ āĻĻ⧇āϝāĻŧ, āφāϗ⧇ Bob-āĻāϰ āĻšāĻžāϤ⧇ āϞ⧇āĻ–āĻž loop āĻĻāĻŋāϝāĻŧ⧇, āϤāĻžāϰāĻĒāϰ āĻāĻ•āϟāĻž āĻ•āϰ⧇ call āĻĻāĻŋāϝāĻŧ⧇āĨ¤ āĻļ⧇āώ⧇ reverse āĻĻāĻŋāϝāĻŧ⧇ vector-āϟāĻžāϕ⧇ āωāĻ˛ā§āĻŸā§‡ āĻĻ⧇āϝāĻŧāĨ¤

#include <algorithm>
#include <iostream>
#include <numeric>
#include <vector>
using namespace std;

int main() {
    vector<int> cups{12, 30, 18, 30, 9};

    int total = 0;
    for (int x : cups) {
        total += x;
    }
    int biggest = cups[0];
    for (int x : cups) {
        if (x > biggest) {
            biggest = x;
        }
    }
    int thirties = 0;
    for (int x : cups) {
        if (x == 30) {
            thirties++;
        }
    }
    cout << "loops: " << total << ' ' << biggest << ' ' << thirties << '\n';

    cout << "calls: " << accumulate(cups.begin(), cups.end(), 0) << ' '
         << *max_element(cups.begin(), cups.end()) << ' '
         << count(cups.begin(), cups.end(), 30) << '\n';

    reverse(cups.begin(), cups.end());
    cout << "reversed:";
    for (int x : cups) {
        cout << ' ' << x;
    }
    cout << '\n';
    return 0;
}
loops: 99 30 2
calls: 99 30 2
reversed: 9 30 18 30 12
āĻ•āĻžāϜāĻšāĻžāϤ⧇ āϞ⧇āĻ–āĻž loopāĻāĻ•āϟāĻž call
āĻŽā§‹āϟ āϝ⧋āĻ—āĻĢāϞāĻāĻ•āϟāĻž āϚāϞāϤāĻŋ āϝ⧋āĻ—āĻĢāϞ, āĻļ⧁āϰ⧁ 0 āĻĨ⧇āϕ⧇accumulate(v.begin(), v.end(), 0)
āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧāϟāĻžāĻāĻ–āύ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āϏ⧇āϰāĻžāϟāĻž, āĻļ⧁āϰ⧁ āĻĒā§āϰāĻĨāĻŽ element āĻĨ⧇āϕ⧇*max_element(v.begin(), v.end())
x-āĻāϰ āϏāĻŽāĻžāύ āĻ•āϝāĻŧāϟāĻžāĻāĻ•āϟāĻž counter āφāϰ āĻāĻ•āϟāĻž ifcount(v.begin(), v.end(), x)
āωāĻ˛ā§āĻŸā§‹ āĻ•ā§āϰāĻŽā§‡āĻĻ⧁āχ āĻŽāĻžāĻĨāĻž āĻĨ⧇āϕ⧇ āĻĻ⧁āχāϟāĻž index, āĻŽāĻžāĻā§‡āϰ āĻĻāĻŋāϕ⧇ swap āĻ•āϰāϤ⧇ āĻ•āϰāϤ⧇reverse(v.begin(), v.end())

āĻĻ⧁āχ āĻĒāĻĨ⧇āχ āĻāĻ•āχ āϏāĻ‚āĻ–ā§āϝāĻž print āĻšāϞ⧋āĨ¤ Call-āϗ⧁āϞ⧋āϤ⧇ āĻāĻŽāύ āϕ⧋āύ⧋ index āύ⧇āχ āϝ⧇āϟāĻž āϭ⧁āϞ āĻ•āϰ⧇ 1 āĻĨ⧇āϕ⧇ āĻļ⧁āϰ⧁ āĻšāĻŦ⧇, āĻāĻŽāύ āϕ⧋āύ⧋ āϏ⧇āϰāĻž-āĻāĻ–āύ-āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āύ⧇āχ āϝ⧇āϟāĻž āϭ⧁āϞ āĻŽāĻžāύ āĻĻāĻŋāϝāĻŧ⧇ āĻļ⧁āϰ⧁ āĻšāĻŦ⧇āĨ¤ <-āĻāϰ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āϭ⧁āϞ āĻ•āϰ⧇ <= āϞ⧇āĻ–āĻžāϰ āϏ⧁āϝ⧋āĻ—āĻ“ āύ⧇āχāĨ¤ max_element āĻāĻ•āϟāĻž āĻŽāĻžāύ āύāĻž, āĻāĻ•āϟāĻž iterator āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧ, āϤāĻžāχ program āĻŽāĻžāύāϟāĻž āĻĒāĻĄāĻŧ⧇ * āĻĻāĻŋāϝāĻŧ⧇āĨ¤ āϤāĻžāχ āĻĒā§āϰāϤāĻŋāϟāĻž call āĻāĻ• āϞāĻžāχāύ⧇ āύāĻŋāĻœā§‡āϰ āĻ•āĻžāĻœā§‡āϰ āύāĻžāĻŽ āĻŦāϞ⧇ āĻĻ⧇āϝāĻŧ, āφāϰ loop-āϟāĻž āωāϧāĻžāĻ“āĨ¤

āĻāĻ•āϟāĻž set-āĻāϰ āĻĒā§āϰāϤāĻŋāϟāĻž āĻ•ā§āϰāĻŽ: next_permutation

Bob-āĻāϰ āĻŦāϏāĻžāϰ āĻ•ā§āϰāĻŽāϗ⧁āϞ⧋ āĻšāϞ⧋ permutation: āĻāĻ•āχ āϜāĻŋāύāĻŋāϏāϗ⧁āϞ⧋āϰ āĻĒā§āϰāϤāĻŋāϟāĻž āϏāĻŽā§āĻ­āĻžāĻŦā§āϝ āĻ•ā§āϰāĻŽāĨ¤ āϤāĻŋāύāϜāύ āĻŦāĻ¨ā§āϧ⧁ āĻŦāϏāϤ⧇ āĻĒāĻžāϰ⧇ 3 × 2 × 1 = 6 āϰāĻ•āĻŽā§‡, āϞ⧇āĻ–āĻž āĻšāϝāĻŧ 3!, āĻĒāĻĄāĻŧāĻž āĻšāϝāĻŧ "3 factorial"āĨ¤ Nested loop āĻ›āĻžāĻĄāĻŧāĻž āĻāĻĻ⧇āϰ āϤāĻžāϞāĻŋāĻ•āĻž āĻŦāĻžāύāĻžāϤ⧇ āĻšāϞ⧇ āĻ•ā§āϰāĻŽāϗ⧁āϞ⧋āϕ⧇ āϏāĻžāϜāĻžāĻ“ dictionary order-āĻāĨ¤ āĻĻ⧁āχāϟāĻž āĻ•ā§āϰāĻŽā§‡āϰ āφāϗ⧇ āĻĒā§āϰāĻĨāĻŽ āϜāĻŋāύāĻŋāϏāϟāĻž āĻŽā§‡āϞāĻžāĻ“, āϏ⧇āϟāĻž āϏāĻŽāĻžāύ āĻšāϞ⧇ āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧāϟāĻž, āĻ āĻŋāĻ• āϝ⧇āĻ­āĻžāĻŦ⧇ āĻ…āĻ­āĻŋāϧāĻžāύ āĻļāĻŦā§āĻĻ āϏāĻžāϜāĻžāϝāĻŧāĨ¤

next_permutation(first, last) range-āϟāĻžāϕ⧇ dictionary order-āĻāϰ āĻĒāϰ⧇āϰ āĻ•ā§āϰāĻŽā§‡ āϏāĻžāϜāĻŋāϝāĻŧ⧇ āĻĻ⧇āϝāĻŧ, āφāϰ true āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧāĨ¤ Range-āĻ āϝāĻĻāĻŋ āφāϗ⧇ āĻĨ⧇āϕ⧇āχ āĻļ⧇āώ āĻ•ā§āϰāĻŽāϟāĻž āĻĨāĻžāϕ⧇, āĻŽāĻžāύ⧇ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧāϟāĻž, āϤāĻžāĻšāϞ⧇ āĻ“ āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧ falseāĨ¤ āϏāĻžāĻĨ⧇ range-āϟāĻžāϕ⧇ āφāĻŦāĻžāϰ āĻĒā§āϰāĻĨāĻŽ āĻ•ā§āϰāĻŽā§‡, āĻŽāĻžāύ⧇ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϛ⧋āϟāϟāĻžāϝāĻŧ, āĻĢāĻŋāϰāĻŋāϝāĻŧ⧇ āφāύ⧇āĨ¤ āϤāĻžāχ āϝ⧇ loop āĻ“āϕ⧇ false āύāĻž āĻĒāĻžāĻ“āϝāĻŧāĻž āĻĒāĻ°ā§āϝāĻ¨ā§āϤ call āĻ•āϰ⧇, āϏ⧇āϟāĻž āĻĒā§āϰāϤāĻŋāϟāĻž āĻ•ā§āϰāĻŽ āĻ āĻŋāĻ• āĻāĻ•āĻŦāĻžāϰ āĻ•āϰ⧇ āĻĻ⧇āϖ⧇āĨ¤

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> seat{1, 2, 3};
    int orders = 0;
    do {
        cout << seat[0] << ' ' << seat[1] << ' ' << seat[2] << '\n';
        orders++;
    } while (next_permutation(seat.begin(), seat.end()));
    cout << orders << " orders, and seat is back to " << seat[0] << ' ' << seat[1] << ' ' << seat[2] << '\n';
    return 0;
}
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
6 orders, and seat is back to 1 2 3

Loop-āϟāĻž do-while, āĻ•āĻžāϰāĻŖ āĻĒā§āϰāĻĨāĻŽ āĻ•ā§āϰāĻŽ 1 2 3-āϕ⧇ āĻĒā§āϰāĻĨāĻŽ call āϏāϰāĻžāύ⧋āϰ āφāϗ⧇āχ āĻ•āĻžāĻœā§‡ āϞāĻžāĻ—āĻžāϤ⧇ āĻšāĻŦ⧇āĨ¤ 3 2 1-āĻāϰ āĻĒāϰ⧇ call false āĻĢ⧇āϰāϤ āĻĻāĻŋāϝāĻŧ⧇āϛ⧇ āφāϰ āĻĒ⧇āĻ›āύ⧇ āϰ⧇āϖ⧇ āϗ⧇āϛ⧇ 1 2 3, āϤāĻžāχ loop āĻĨāĻžāĻŽāĻžāϰ āϏāĻŽāϝāĻŧ vector āφāĻŦāĻžāϰ āĻļ⧁āϰ⧁āϰ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧāĨ¤ āĻāχ āĻĒāĻžāρāϚ āϞāĻžāχāύāχ āϚāϞ⧇ 3 āϜāύ, 6 āϜāύ āĻŦāĻž n āϜāύ āĻŦāĻ¨ā§āϧ⧁āϰ āϜāĻ¨ā§āϝāĨ¤ āϤāĻžāχ āĻšā§‡āϝāĻŧāĻžāϰ āϝāϤāϗ⧁āϞ⧋āχ āĻšā§‹āĻ•, Bob-āĻāϰ nested loop-āĻāϰ āϜāĻ™ā§āĻ—āϞ⧇āϰ āϜāĻžāϝāĻŧāĻ—āĻž āύ⧇āϝāĻŧ next_permutationāĨ¤

āĻĻ⧇āĻ–ā§‹, next_permutation āϕ⧀āĻ­āĻžāĻŦ⧇ 1 2 3 āĻĒ⧇āϰāĻŋāϝāĻŧ⧇ āϝāĻžāϝāĻŧ

āĻĒā§āϰāϤāĻŋāϟāĻž call āĻāĻŽāύ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϛ⧋āϟ āĻŦāĻĻāϞāϟāĻž āĻ•āϰ⧇, āϝāĻžāϤ⧇ āĻ•ā§āϰāĻŽāϟāĻž āĻŦāĻĄāĻŧ āĻšāϝāĻŧ, āϚāĻžāϰāϟāĻž āϚāĻžāϞ⧇āĨ¤ āĻĒā§āϰāĻĨāĻŽā§‡ āĻ–ā§‹āρāĻœā§‡ āĻļ⧇āώ rise: āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻĄāĻžāύ⧇āϰ position i, āϝ⧇āĻ–āĻžāύ⧇ v[i] < v[i + 1]āĨ¤ āϤāĻžāϰāĻĒāϰ āĻ“āϰ āĻĒāϰ⧇āϰ element-āϗ⧁āϞ⧋āϰ āĻŽāĻ§ā§āϝ⧇ āĻ–ā§‹āρāĻœā§‡ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻĄāĻžāύ⧇āϰ āϏ⧇āχāϟāĻž, āϝ⧇āϟāĻž v[i]-āĻāϰ āĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ, āφāϰ āĻĻ⧁āĻŸā§‹āϕ⧇ swap āĻ•āϰ⧇āĨ¤ āĻļ⧇āώ⧇ position i-āĻāϰ āĻĒāϰ⧇āϰ āϏāĻŦāĻ•āĻŋāϛ⧁ reverse āĻ•āϰ⧇āĨ¤ āϕ⧋āύ⧋ rise-āχ āύāĻž āĻĨāĻžāĻ•āϞ⧇ range-āϟāĻž āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ āĻ•ā§āϰāĻŽ, āϤāĻžāχ call āĻĒ⧁āϰ⧋ range āωāĻ˛ā§āĻŸā§‡ āĻĻ⧇āϝāĻŧ āφāϰ false āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧāĨ¤

Widget-āϟāĻž vector<int> v{1, 2, 3}-āĻāϰ āωāĻĒāϰ āĻ›āϝāĻŧāϟāĻž call āϚāĻžāϞāĻŋāϝāĻŧ⧇ āĻĻ⧇āĻ–āĻžāϝāĻŧ, āĻĒā§āϰāϤāĻŋ call-āĻ āĻāĻ• āϏāĻžāϰāĻŋāĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻž āϏāĻžāϰāĻŋ Compiler Explorer-āĻ āĻāĻ•āϟāĻž program print āĻ•āϰ⧇āϛ⧇, āϝ⧇āϟāĻž āĻāχ āϚāĻžāϞāϗ⧁āϞ⧋ āĻšāĻžāϤ⧇ āĻ•āϰ⧇āĨ¤ āφāϰ āĻĒā§āϰāϤāĻŋāϟāĻž āϏāĻžāϰāĻŋ std::next_permutation-āĻāϰ āϏāĻžāĻĨ⧇ āĻŽāĻŋāϞāĻŋāϝāĻŧ⧇ āĻĻ⧇āĻ–āĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ "none" āĻŽāĻžāύ⧇ āϕ⧋āύ⧋ rise āĻĒāĻžāĻ“āϝāĻŧāĻž āϝāĻžāϝāĻŧāύāĻŋāĨ¤

vector<int> v{1, 2, 3}-āĻāϰ āωāĻĒāϰ next_permutation-āĻāϰ āĻ›āϝāĻŧāϟāĻž call, āĻĒā§āϰāϤāĻŋ call-āĻ āĻāĻ• āϏāĻžāϰāĻŋāĨ¤

Callāφāϗ⧇āĻļ⧇āώ riseāϝāĻžāϰ āϏāĻžāĻĨ⧇ swapswap-āĻāϰ āĻĒāϰ⧇reverse-āĻāϰ āĻĒāϰ⧇āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧ
11 2 3v[1] = 2v[2] = 31 3 21 3 2true
21 3 2v[0] = 1v[2] = 22 3 12 1 3true
32 1 3v[1] = 1v[2] = 32 3 12 3 1true
42 3 1v[0] = 2v[1] = 33 2 13 1 2true
53 1 2v[1] = 1v[2] = 23 2 13 2 1true
63 2 1none--1 2 3false

Call 2-āĻ āϚāĻžāϰāϟāĻž āϚāĻžāϞāχ āĻĻ⧇āĻ–āĻž āϝāĻžāϝāĻŧāĨ¤ Rise-āϟāĻž 1-āĻāϰ āĻ•āĻžāϛ⧇, 1 swap āĻšāϝāĻŧ 2-āĻāϰ āϏāĻžāĻĨ⧇, āφāϰ āϞ⧇āĻœā§‡āϰ 3 1 āωāĻ˛ā§āĻŸā§‡ āĻšāϝāĻŧ 1 3āĨ¤ Call 6 3 2 1-āĻ āϕ⧋āύ⧋ rise āĻĒāĻžāϝāĻŧ āύāĻž, āϤāĻžāχ āϏāĻŦāĻ•āĻŋāϛ⧁ āωāĻ˛ā§āĻŸā§‡ 1 2 3 āĻŦāĻžāύāĻžāϝāĻŧ āφāϰ false āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧāĨ¤ āĻāχ āϚāĻžāϞāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ GCC 12-āĻāϰ āύāĻŋāĻœā§‡āϰ code lesson 05 āĻĒāĻĄāĻŧ⧇ āĻĻ⧇āĻ–āĻžāĻŦ⧇āĨ¤ āϤāĻžāχ āĻĒā§āϰāϤāĻŋāϟāĻž call āϝāϤāϟāĻž āĻĒāĻžāϰ⧇ āĻ•āĻŽ āĻŦāĻĻāϞāĻžāϝāĻŧ, āφāϰ āĻ•ā§āϰāĻŽāϗ⧁āϞ⧋ āĻŦ⧇āϰ⧋āϝāĻŧ āϛ⧋āϟ āĻĨ⧇āϕ⧇ āĻŦāĻĄāĻŧāϤ⧇āĨ¤

āĻĒā§āϰāĻĨāĻŽ āĻĻāĻŋāύ⧇āχ āϝ⧇ syntax āϞāĻžāĻ—āĻŦ⧇

āĻĒā§āϰāĻĨāĻŽ algorithm-āϗ⧁āϞ⧋, āφāϰ āĻĒā§āϰāϤāĻŋāϟāĻž āĻ•ā§āϰāĻŽ āϘ⧁āϰ⧇ āĻĻ⧇āĻ–āĻžāϰ loop

#include <numeric>      accumulate, and the other arithmetic algorithms
#include <algorithm>    count, max_element, min_element, reverse, sort, next_permutation

accumulate(first, last, init)     init plus every element; the result has init's type
count(first, last, x)             how many elements equal x
max_element(first, last)          an iterator to the first largest element
min_element(first, last)          an iterator to the first smallest element
*it                               the element an iterator points at
it - v.begin()                    that element's index in a vector
reverse(first, last)              turn the range around, in place

sort(v.begin(), v.end());                          start from the smallest order
do {
    ... use v ...
} while (next_permutation(v.begin(), v.end()));   every order once, smallest first
  • first āφāϰ last āĻšāϞ⧋ iterator, āϏāĻžāϧāĻžāϰāĻŖāϤ v.begin() āφāϰ v.end()āĨ¤ āϝ⧇āϕ⧋āύ⧋ āĻ…āĻ‚āĻļāĻ“ āϚāϞ⧇, āϝ⧇āĻŽāύ v.begin() + 1 āĻĨ⧇āϕ⧇ v.begin() + 4āĨ¤
  • accumulate-āĻāϰ āϤ⧃āϤ⧀āϝāĻŧ argument āĻšāϞ⧋ āĻļ⧁āϰ⧁āϰ āĻŽāĻžāύ, āφāϰ āϏ⧇āϟāĻžāχ āωāĻ¤ā§āϤāϰ⧇āϰ type āĻ āĻŋāĻ• āĻ•āϰ⧇: 0 āĻĻāĻŋāϞ⧇ int, 0LL āĻĻāĻŋāϞ⧇ long long, 0.0 āĻĻāĻŋāϞ⧇ doubleāĨ¤
  • max_element āφāϰ min_element āĻāĻ•āϟāĻž iterator āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧāĨ¤ āĻŽāĻžāύāϟāĻž āĻĒāĻĄāĻŧā§‹ *it āĻĻāĻŋāϝāĻŧ⧇, āφāϰ index āĻĒāĻžāĻ“ it - v.begin() āĻĻāĻŋāϝāĻŧ⧇āĨ¤
  • reverse āφāϰ next_permutation range-āϟāĻžāϕ⧇āχ āĻŦāĻĻāϞ⧇ āĻĻ⧇āϝāĻŧāĨ¤ āĻĒāϰ⧇āϰ āĻ•ā§āϰāĻŽ āĻĨāĻžāĻ•āĻž āĻĒāĻ°ā§āϝāĻ¨ā§āϤ next_permutation āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧ true, āφāϰ āĻļ⧇āώ āĻ•ā§āϰāĻŽā§‡āϰ āĻĒāϰ⧇ falseāĨ¤

āϤāĻžāχ āĻāχ lesson-āĻāϰ āϜāĻ¨ā§āϝ āϞāĻžāϗ⧇ āĻĻ⧁āχāϟāĻž header āφāϰ āϏāĻžāϤāϟāĻž call, āφāϰ āĻĒā§āϰāϤāĻŋāϟāĻž call range āύ⧇āϝāĻŧ āĻāĻ•āχ āĻ­āĻžāĻŦ⧇āĨ¤

āφāϗ⧇ sort āĻ•āϰ⧋, āύāχāϞ⧇ āĻ•ā§āϰāĻŽ āĻŦāĻžāĻĻ āĻĒāĻĄāĻŧāĻŦ⧇

next_permutation dictionary order-āĻ āĻļ⧁āϧ⧁ āϏāĻžāĻŽāύ⧇āϰ āĻĻāĻŋāϕ⧇ āϝāĻžāϝāĻŧāĨ¤ āĻŽāĻžāĻāĻ–āĻžāύ āĻĨ⧇āϕ⧇ āĻļ⧁āϰ⧁ āĻ•āϰāϞ⧇ āĻļ⧁āϰ⧁āϰ āφāϗ⧇āϰ āĻ•ā§āϰāĻŽāϗ⧁āϞ⧋āϤ⧇ āĻ“ āĻ•āĻ–āύ⧋ āϝāĻžāϝāĻŧ āύāĻžāĨ¤ āĻāχ program 2 1 3 āĻĨ⧇āϕ⧇ āĻ•ā§āϰāĻŽ āĻ—ā§‹āύ⧇, āϤāĻžāϰāĻĒāϰ sort āĻ•āϰ⧇ āφāĻŦāĻžāϰ āĻ—ā§‹āύ⧇āĨ¤

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

int countOrders(vector<int> v) {
    int orders = 0;
    do {
        orders++;
    } while (next_permutation(v.begin(), v.end()));
    return orders;
}

int main() {
    vector<int> friends{2, 1, 3};
    cout << "from 2 1 3: " << countOrders(friends) << " orders\n";
    sort(friends.begin(), friends.end());
    cout << "from 1 2 3: " << countOrders(friends) << " orders\n";
    return 0;
}
from 2 1 3: 4 orders
from 1 2 3: 6 orders

2 1 3 āĻĨ⧇āϕ⧇ loop āĻĻ⧇āϖ⧇āϛ⧇ 2 1 3, 2 3 1, 3 1 2 āφāϰ 3 2 1: āĻ›āϝāĻŧāϟāĻžāϰ āĻŽāĻ§ā§āϝ⧇ āϚāĻžāϰāϟāĻžāĨ¤ āĻļ⧁āϰ⧁āϰ āφāϗ⧇āϰ āĻĻ⧁āχāϟāĻž āĻ•ā§āϰāĻŽ, 1 2 3 āφāϰ 1 3 2, āĻ•āĻ–āύ⧋ āφāϏ⧇āύāĻŋāĨ¤ sort-āĻāϰ āĻĒāϰ⧇ āĻ›āϝāĻŧāϟāĻžāχ āĻŦ⧇āϰāĻŋāϝāĻŧ⧇āϛ⧇āĨ¤ āϕ⧋āύ⧋ āĻŽāĻžāύ āĻĻ⧁āχāĻŦāĻžāϰ āĻĨāĻžāĻ•āϞ⧇ āĻĒā§āϰāϤāĻŋāϟāĻž āφāϞāĻžāĻĻāĻž āĻ•ā§āϰāĻŽ āφāϏ⧇ āĻāĻ•āĻŦāĻžāϰ āĻ•āϰ⧇: 1 1 2 āĻĨ⧇āϕ⧇ āφāϏ⧇ āϤāĻŋāύāϟāĻž āĻ•ā§āϰāĻŽ, āĻ›āϝāĻŧāϟāĻž āύāĻž, āφāϰ lesson 02 āϏ⧇āϟāĻž āϧāĻžāĻĒ⧇ āϧāĻžāĻĒ⧇ āĻĻ⧇āĻ–āĻžāĻŦ⧇āĨ¤ āϤāĻžāχ āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āφāϗ⧇ sort āĻ•āϰ⧋āĨ¤

āĻļ⧁āϰ⧁āϰ āĻŽāĻžāύāχ type āĻ āĻŋāĻ• āĻ•āϰ⧇

accumulate āϚāϞāϤāĻŋ āϝ⧋āĻ—āĻĢāϞāϟāĻž āϰāĻžāϖ⧇ āĻļ⧁āϰ⧁āϰ āĻŽāĻžāύ⧇āϰ type-āĻ, element-āĻāϰ type-āĻ āύāĻžāĨ¤ āĻāϟāĻž āĻĻ⧁āχ āĻĻāĻŋāϕ⧇āχ āĻāĻžāĻŽā§‡āϞāĻž āĻ•āϰ⧇: āĻŦāĻĄāĻŧ āϝ⧋āĻ—āĻĢāϞ⧇, āφāϰ āĻ­āĻ—ā§āύāĻžāĻ‚āĻļ⧇āĨ¤

#include <iostream>
#include <numeric>
#include <vector>
using namespace std;

int main() {
    vector<int> steps(100000, 100000);
    cout << accumulate(steps.begin(), steps.end(), 0) << '\n';
    cout << accumulate(steps.begin(), steps.end(), 0LL) << '\n';

    vector<double> prices{1.5, 2.5, 3.5};
    cout << accumulate(prices.begin(), prices.end(), 0) << '\n';
    cout << accumulate(prices.begin(), prices.end(), 0.0) << '\n';
    return 0;
}
1410065408
10000000000
6
7.5

100000 āĻĻāĻŋāύ āϧāϰ⧇ āϰ⧋āϜ 100000 āĻĒāĻž āĻšāĻžāρāϟāϞ⧇ āĻšāϝāĻŧ 10000000000, āϝ⧇āϟāĻž āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ int 2147483647-āĻāϰ āĻ…āύ⧇āĻ• āωāĻĒāϰ⧇āĨ¤ 0 āĻĻāĻŋāϞ⧇ āϝ⧋āĻ—āĻĢāϞāϟāĻž int, āϤāĻžāχ āĻ“āϟāĻž āϘ⧁āϰ⧇ āϗ⧇āϛ⧇, āφāϰ GCC 12 print āĻ•āϰ⧇āϛ⧇ 1410065408āĨ¤ Signed overflow āĻšāϞ⧋ undefined behaviour, āϤāĻžāχ āĻāχ āϏāĻ‚āĻ–ā§āϝāĻžāϟāĻž āĻāχ compiler āϝāĻž āĻ•āϰ⧇āϛ⧇ āϤāĻž, āϕ⧋āύ⧋ āĻ•āĻĨāĻž āĻĻ⧇āĻ“āϝāĻŧāĻž āĻĢāϞ āύāĻž; āϏāĻ‚āĻ–ā§āϝāĻžāϟāĻž āϕ⧋āĻĨāĻž āĻĨ⧇āϕ⧇ āφāϏ⧇, lesson 05 āĻŦāϞāĻŦ⧇āĨ¤ 0LL āĻĻāĻŋāϞ⧇ āϝ⧋āĻ—āĻĢāϞ long long, āφāϰ āωāĻ¤ā§āϤāϰ āĻ āĻŋāĻ•āĨ¤

āĻĻāĻžāĻŽāϗ⧁āϞ⧋ āϝ⧋āĻ— āĻ•āϰāϞ⧇ āĻšāϝāĻŧ 7.5, āĻ•āĻŋāĻ¨ā§āϤ⧁ 0 āφāĻŦāĻžāϰ āϝ⧋āĻ—āĻĢāϞāϕ⧇ int āĻŦāĻžāύāĻŋāϝāĻŧ⧇ āĻĻāĻŋāϝāĻŧ⧇āϛ⧇āĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻž āϧāĻžāĻĒ⧇ āĻ­āĻ—ā§āύāĻžāĻ‚āĻļāϟāĻž āϕ⧇āĻŸā§‡ āĻĒā§‚āĻ°ā§āĻŖāϏāĻ‚āĻ–ā§āϝāĻž āĻšāϝāĻŧ⧇ āϗ⧇āϛ⧇: 0 + 1.5 āĻšāϞ⧋ 1, āϤāĻžāϰāĻĒāϰ 3.5 āĻšāϞ⧋ 3, āϤāĻžāϰāĻĒāϰ 6.5 āĻšāϞ⧋ 6āĨ¤ 0.0 āĻĻāĻŋāϞ⧇ āϝ⧋āĻ—āĻĢāϞ doubleāĨ¤ āϤāĻžāχ āϝ⧇ type-āĻ āωāĻ¤ā§āϤāϰ āϚāĻžāĻ“, āĻļ⧁āϰ⧁āϰ āĻŽāĻžāύāϟāĻž āϏ⧇āχ type-āĻ āϞ⧇āĻ–ā§‹āĨ¤

āĻļ⧁āϰ⧁āϰ āĻŽāĻžāύāϝ⧋āĻ—āĻĢāϞ āĻĨāĻžāϕ⧇āĻ•āĻ–āύ āύ⧇āĻŦ⧇
0intāĻĒā§‚āĻ°ā§āĻŖāϏāĻ‚āĻ–ā§āϝāĻžāϰ āϛ⧋āϟ āϝ⧋āĻ—āĻĢāϞ
0LLlong longāϝ⧇ āϝ⧋āĻ—āĻĢāϞ 2147483647 āĻĒ⧇āϰ⧋āϤ⧇ āĻĒāĻžāϰ⧇
0.0doubleāĻĻāĻžāĻŽ, āĻ—āĻĄāĻŧ, āĻ­āĻ—ā§āύāĻžāĻ‚āĻļ āφāϛ⧇ āĻāĻŽāύ āϝ⧇āϕ⧋āύ⧋ āĻ•āĻŋāϛ⧁

āĻĒā§āϰāϤāĻŋāϟāĻž call-āĻāϰ āĻ–āϰāϚ āĻ•āϤ

accumulate, count, max_element āφāϰ min_element āĻĒā§āϰāϤāĻŋāϟāĻž element āĻāĻ•āĻŦāĻžāϰ āĻ•āϰ⧇ āĻĻ⧇āϖ⧇: n-āϟāĻž element-āĻ n āϧāĻžāĻĒ, O(n)āĨ¤ reverse āĻ•āϰ⧇ n / 2-āϟāĻž swap, āϏ⧇āϟāĻžāĻ“ O(n)āĨ¤ āĻāĻ•āχ āĻ•āĻžāĻœā§‡āϰ āĻšāĻžāϤ⧇ āϞ⧇āĻ–āĻž loop-āĻāϰ āĻ–āϰāϚāĻ“ āĻāĻ•, āϤāĻžāχ call āĻ•āĻ–āύ⧋ āϧ⧀āϰ āĻĒāĻĨ āύāĻžāĨ¤

next_permutation-āĻāϰ āĻāĻ•āϟāĻž call worst case-āĻ O(n), āϝāĻ–āύ āĻĒ⧁āϰ⧋ range āωāĻ˛ā§āϟāĻžāϤ⧇ āĻšāϝāĻŧ, āϝ⧇āĻŽāύ call 6-āĻ āĻšāϞ⧋āĨ¤ āϤāĻŦ⧇ āϏāĻŦ āĻ•ā§āϰāĻŽ āĻŽāĻŋāϞāĻŋāϝāĻŧ⧇ āĻ—āĻĄāĻŧ⧇ āĻāĻ•āϟāĻž call-āĻ āϞāĻžāϗ⧇ āĻŽā§‹āϟāĻžāĻŽā§āϟāĻŋ 3āϟāĻž āϤ⧁āϞāύāĻž: n = 3-āĻ 2.5, n = 10-āĻ 3.08, Compiler Explorer-āĻ āϗ⧁āύ⧇ āĻĻ⧇āĻ–āĻžāĨ¤ āφāϏāϞ āĻ–āϰāϚ āĻšāϞ⧋ āĻ•ā§āϰāĻŽā§‡āϰ āϏāĻ‚āĻ–ā§āϝāĻžāĨ¤ n-āϟāĻž āϜāĻŋāύāĻŋāϏ⧇āϰ āĻ•ā§āϰāĻŽ n!-āϟāĻž, āφāϰ āĻĒā§āϰāϤāĻŋāϟāĻž āĻŦāĻžāĻĄāĻŧāϤāĻŋ āϜāĻŋāύāĻŋāϏ āϏāĻ‚āĻ–ā§āϝāĻžāϟāĻžāϕ⧇ āϗ⧁āĻŖ āĻ•āϰ⧇ āĻŦāĻžāĻĄāĻŧāĻžāϝāĻŧāĨ¤ āĻāχ program 8 āĻĨ⧇āϕ⧇ 11āϟāĻž āϜāĻŋāύāĻŋāϏ⧇āϰ āĻĒ⧁āϰ⧋ do-while-āĻāϰ āϏāĻŽāϝāĻŧ āĻŽāĻžāĻĒ⧇āĨ¤

#include <algorithm>
#include <chrono>
#include <iostream>
#include <numeric>
#include <vector>
using namespace std;

int main() {
    for (int n = 8; n <= 11; n++) {
        vector<int> v(n);
        iota(v.begin(), v.end(), 1);
        auto t0 = chrono::steady_clock::now();
        long long count = 0, check = 0;
        do {
            count++;
            check += v[0];
        } while (next_permutation(v.begin(), v.end()));
        auto t1 = chrono::steady_clock::now();
        cout << n << ": " << count << " orders, " << chrono::duration<double, milli>(t1 - t0).count() << " ms (" << check << ")\n";
    }
    return 0;
}
nāĻ•ā§āϰāĻŽ, n!āϏāĻŦāϗ⧁āϞ⧋āϰ āϏāĻŽāϝāĻŧ
8403200.082 āĻĨ⧇āϕ⧇ 0.21 ms
93628800.75 āĻĨ⧇āϕ⧇ 2.88 ms
1036288007.4 āĻĨ⧇āϕ⧇ 16.8 ms
113991680081 āĻĨ⧇āϕ⧇ 189 ms

Compiler Explorer-āĻāϰ GCC 12.2-āĻ -O2 -std=c++17 āĻĻāĻŋāϝāĻŧ⧇ āĻāĻ—āĻžāϰ⧋āĻŦāĻžāϰ āϚāĻžāϞāĻžāύ⧋, āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āφāϞāĻžāĻĻāĻž āĻāĻ•āϟāĻž comment āĻĻāĻŋāϝāĻŧ⧇, āϝāĻžāϤ⧇ āĻ•āĻŋāϛ⧁āχ cache āĻĨ⧇āϕ⧇ āύāĻž āφāϏ⧇āĨ¤ āĻāĻ•āχ input āϕ⧋āύ⧋ run-āĻ āĻ…āĻ¨ā§āϝ run-āĻāϰ āĻšā§‡āϝāĻŧ⧇ 2 āĻĨ⧇āϕ⧇ 3 āϗ⧁āĻŖ āϧ⧀āϰ āϚāϞ⧇āϛ⧇, āϤāĻžāχ āĻĒā§āϰāϤāĻŋāϟāĻž āϏāĻžāϰāĻŋāϕ⧇ āĻāĻ•āϟāĻž range āĻšāĻŋāϏ⧇āĻŦ⧇ āĻĒāĻĄāĻŧā§‹āĨ¤ āĻĒā§āϰāϤāĻŋ āϧāĻžāĻĒ⧇ āϏāĻŽāϝāĻŧ āĻŽā§‹āϟāĻžāĻŽā§āϟāĻŋ n āϗ⧁āĻŖ āĻŦāĻžāĻĄāĻŧ⧇, n! āϝ⧇āĻŽāύ āĻŦāϞ⧇āĨ¤ 12āϟāĻž āϜāĻŋāύāĻŋāϏ āĻŽāĻžāύ⧇ 479001600āϟāĻž āĻ•ā§āϰāĻŽ, 11āϟāĻžāϰ āϏāĻŽāϝāĻŧ⧇āϰ āĻŽā§‹āϟāĻžāĻŽā§āϟāĻŋ 12 āϗ⧁āĻŖāĨ¤ āϤāĻžāχ 10 āĻŦāĻž 11āϟāĻž āϜāĻŋāύāĻŋāϏ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻĒā§āϰāϤāĻŋāϟāĻž āĻ•ā§āϰāĻŽ āϘ⧁āϰ⧇ āĻĻ⧇āĻ–āĻž āϚāϞ⧇, āφāϰ loop-āĻāϰ āĻ­āĻŋāϤāϰ⧇āϰ āφāϏāϞ āĻ•āĻžāϜ āĻāϰ āϏāĻžāĻĨ⧇ āϝ⧋āĻ— āĻšāϝāĻŧāĨ¤

Example 1: āϤāĻŋāύāϟāĻž āωāĻ¤ā§āϤāϰ, āϤāĻŋāύāϟāĻž call

āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϛ⧋āϟ program: āĻŦāĻŋāĻ•ā§āϰāĻŋāϰ āĻāĻ•āϟāĻž āĻŦāĻžāρāϧāĻž āϤāĻžāϞāĻŋāĻ•āĻž, āĻ“āϰ āĻŽā§‹āϟ, āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ āĻŦāĻŋāĻ•ā§āϰāĻŋ, āφāϰ āĻ āĻŋāĻ• 45-āĻāϰ āĻŦāĻŋāĻ•ā§āϰāĻŋ āĻ•āϝāĻŧāϟāĻžāĨ¤

#include <algorithm>
#include <iostream>
#include <numeric>
#include <vector>
using namespace std;

int main() {
    vector<int> sales{120, 45, 300, 45, 80};
    cout << "total: " << accumulate(sales.begin(), sales.end(), 0) << '\n';
    cout << "largest: " << *max_element(sales.begin(), sales.end()) << '\n';
    cout << "sales of 45: " << count(sales.begin(), sales.end(), 45) << '\n';
    return 0;
}
total: 590
largest: 300
sales of 45: 2

āϤāĻŋāύāϟāĻž āĻĒā§āϰāĻļā§āύ, āϤāĻŋāύāϟāĻž call, āφāϰ āϕ⧋āĻĨāĻžāĻ“ āĻāĻ•āϟāĻžāĻ“ index āύ⧇āχāĨ¤ 45-āĻāϰ āĻĻ⧁āχāϟāĻž āĻŦāĻŋāĻ•ā§āϰāĻŋāχ āĻ—ā§‹āύāĻž āĻšāϝāĻŧ⧇āϛ⧇, āϝ⧇āĻ–āĻžāύ⧇āχ āĻŦāϏ⧇ āĻĨāĻžāϕ⧁āĻ•āĨ¤

Run in Compiler
Example 2: Kenji-āϰ āϤāĻžāϞāĻž

Kenji-āϰ āϏāĻžāχāϕ⧇āϞ⧇āϰ āϤāĻžāϞāĻžāϝāĻŧ āϤāĻŋāύāϟāĻž āϚāĻžāĻ•āϤāĻŋ, āφāϰ āĻ“āϰ āĻŽāύ⧇ āφāϛ⧇ āĻ…āĻ™ā§āĻ•āϗ⧁āϞ⧋ 3, 5 āφāϰ 8, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻ•ā§āϰāĻŽāϟāĻž āύāĻžāĨ¤ āϏ⧇ dictionary order-āĻ code āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧇, āϝāϤāĻ•ā§āώāĻŖ āύāĻž āϤāĻžāϞāĻž āĻ–ā§‹āϞ⧇āĨ¤ Program-āϟāĻž āϤāĻžāϞāĻžāϰ āĻ­ā§‚āĻŽāĻŋāĻ•āĻžāĻ“ āύ⧇āϝāĻŧ, āϤāĻžāχ āĻ—ā§‹āĻĒāύ code-āϟāĻž āĻ“ āϜāĻžāύ⧇; Kenji āϜāĻžāύ⧇ āύāĻžāĨ¤ āĻāĻ•āϟāĻž string āĻšāϞ⧋ character-āĻāϰ āĻāĻ•āϟāĻž range, āϤāĻžāχ sort āφāϰ next_permutation āϏāϰāĻžāϏāϰāĻŋ āĻ“āϰ āωāĻĒāϰ āϚāϞ⧇āĨ¤

#include <algorithm>
#include <iostream>
#include <string>
using namespace std;

int main() {
    string secret = "853";   // the lock knows it; Kenji does not
    string code = "583";     // the three digits, in the order Kenji remembers
    sort(code.begin(), code.end());
    int tries = 0;
    do {
        tries++;
        cout << "try " << tries << ": " << code << '\n';
        if (code == secret) {
            break;
        }
    } while (next_permutation(code.begin(), code.end()));
    cout << "open after " << tries << " tries\n";
    return 0;
}
try 1: 358
try 2: 385
try 3: 538
try 4: 583
try 5: 835
try 6: 853
open after 6 tries

Sort 583-āϕ⧇ āĻŦāĻžāύāĻŋāϝāĻŧ⧇āϛ⧇ 358, āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϛ⧋āϟ code, āϤāĻžāχ āϕ⧋āύ⧋ code āĻŦāĻžāĻĻ āĻĒāĻĄāĻŧ⧇āύāĻŋāĨ¤ āϤāĻžāϞāĻž āĻ–ā§‹āϞāĻžāϰ āϏāĻžāĻĨ⧇ āϏāĻžāĻĨ⧇ break do-while āĻĨ⧇āϕ⧇ āĻŦ⧇āϰāĻŋāϝāĻŧ⧇ āφāϏ⧇, āĻāĻ–āĻžāύ⧇ āώāĻˇā§āĻ  āφāϰ āĻļ⧇āώ āĻšā§‡āĻˇā§āϟāĻžāϝāĻŧāĨ¤ āϤāĻŋāύāϟāĻž āĻ…āĻ™ā§āϕ⧇ āĻŦāĻĄāĻŧāĻœā§‹āϰ 3! = 6 āĻŦāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āϞāĻžāϗ⧇āĨ¤

Run in Compiler
Example 3: āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦ⧇āĻļāĻŋ āύāĻŽā§āĻŦāϰ, āφāϰ āϕ⧇ āĻĒ⧇āϞ

Amara āύāĻžāĻŽāϗ⧁āϞ⧋ āϰāĻžāϖ⧇ āĻāĻ•āϟāĻž vector-āĻ, āφāϰ āύāĻŽā§āĻŦāϰāϗ⧁āϞ⧋ āφāϰ⧇āĻ•āϟāĻžāϝāĻŧ, āĻāĻ•āχ āĻ•ā§āϰāĻŽā§‡āĨ¤ max_element āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦ⧇āĻļāĻŋ āύāĻŽā§āĻŦāϰ⧇āϰ āĻĻāĻŋāϕ⧇ āĻāĻ•āϟāĻž iterator āĻĻ⧇āϝāĻŧ, āφāϰ āϤāĻž āĻĨ⧇āϕ⧇ score.begin() āĻŦāĻŋāϝāĻŧā§‹āĻ— āĻ•āϰāϞ⧇ āĻĒāĻžāĻ“āϝāĻŧāĻž āϝāĻžāϝāĻŧ indexāĨ¤ āϏ⧇āχ index āĻĻāĻŋāϝāĻŧ⧇āχ āύāĻžāĻŽāϟāĻž āĻĒāĻĄāĻŧāĻž āĻšāϝāĻŧāĨ¤

#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main() {
    vector<string> names{"alice", "bob", "david", "zara"};
    vector<int> score{72, 91, 85, 91};
    auto best = max_element(score.begin(), score.end());
    int at = best - score.begin();
    cout << "top score " << *best << " at index " << at << ": " << names[at] << '\n';
    return 0;
}
top score 91 at index 1: bob

Bob āφāϰ Zara āĻĻ⧁āϜāύ⧇āχ āĻĒ⧇āϝāĻŧ⧇āϛ⧇ 91, āφāϰ max_element āĻĢ⧇āϰāϤ āĻĻāĻŋāϝāĻŧ⧇āϛ⧇ āĻĒā§āϰāĻĨāĻŽāϜāύāϕ⧇, index 1-āĻāϰ Bob-āϕ⧇āĨ¤ āϤāĻžāχ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ āĻŽāĻžāύ⧇ āĻĻ⧁āχāϟāĻž element āϏāĻŽāĻžāύ āĻšāϞ⧇ max_element āĻĻ⧇āĻ–āĻžāϝāĻŧ āϏāĻžāĻŽāύ⧇āϰ āĻĻāĻŋāϕ⧇āϰāϟāĻžāϕ⧇āĨ¤ Amara āφāϏāϞ⧇ āĻ āĻŋāĻ• āĻāχ program-āϟāĻžāχ āϞāĻŋāĻ–āϤāĨ¤

Run in Compiler

āĻāϟāĻž āϕ⧋āĻĨāĻžāϝāĻŧ āĻ•āĻžāĻœā§‡ āϞāĻžāϗ⧇

  • Python-āĻāϰ itertools.permutations. āĻ“āϰ documentation āĻŦāϞ⧇, āĻ•ā§āϰāĻŽāϗ⧁āϞ⧋ āĻŦ⧇āϰ⧋āϝāĻŧ lexicographic order-āĻ, input āϝ⧇ āĻ•ā§āϰāĻŽā§‡ āφāϛ⧇ āϏ⧇āϟāĻž āϧāϰ⧇āĨ¤ āϤāĻžāχ sort āĻ•āϰāĻž input āĻĻāĻŋāϞ⧇ output-āĻ“ āφāϏ⧇ āϏāĻžāϜāĻžāύ⧋: āĻāĻ•āχ "āφāϗ⧇ sort" āύāĻŋāϝāĻŧāĻŽāĨ¤ āϤāĻŦ⧇ next_permutation-āĻāϰ āĻŽāϤ⧋ āύāĻž, āĻ“ element-āϗ⧁āϞ⧋āϕ⧇ āφāϞāĻžāĻĻāĻž āϧāϰ⧇ āĻ“āĻĻ⧇āϰ position āĻĻāĻŋāϝāĻŧ⧇, āϤāĻžāχ āĻāĻ•āχ āĻŽāĻžāύ āĻĻ⧁āχāĻŦāĻžāϰ āĻĨāĻžāĻ•āϞ⧇ āĻāĻ•āχ āĻ•ā§āϰāĻŽāĻ“ āĻĻ⧁āχāĻŦāĻžāϰ āφāϏ⧇āĨ¤
  • Java-āϰ java.util.Collections. āĻ“āϰ max, min, reverse āφāϰ frequency āĻ āĻŋāĻ• max_element, min_element, reverse āφāϰ count-āĻāϰ āĻ•āĻžāϜāϗ⧁āϞ⧋ āĻ•āϰ⧇āĨ¤ āĻāĻ•āϟāĻž āϤāĻĢāĻžāϤ āφāϛ⧇: āĻ–āĻžāϞāĻŋ collection āĻĒ⧇āϞ⧇ Collections.max NoSuchElementException āϛ⧁āĻĄāĻŧ⧇ āĻĻ⧇āϝāĻŧ, āϝ⧇āĻ–āĻžāύ⧇ max_element āϚ⧁āĻĒāϚāĻžāĻĒ end() āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧāĨ¤
  • NumPy-āϰ argmax. np.argmax āĻāĻ•āϟāĻž array-āϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ āĻŽāĻžāύ⧇āϰ index āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧ, āϝ⧇āĻŽāύ āĻāĻ–āĻžāύ⧇ max_element āĻĨ⧇āϕ⧇ begin() āĻŦāĻŋāϝāĻŧā§‹āĻ— āĻ•āϰāϞ⧇ āĻĒāĻžāĻ“āϝāĻŧāĻž āϝāĻžāϝāĻŧāĨ¤ āĻ“āϰ documentation āĻŦāϞ⧇, āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ āĻŽāĻžāύ āĻāĻ•āĻžāϧāĻŋāĻ•āĻŦāĻžāϰ āĻĨāĻžāĻ•āϞ⧇ āĻĒā§āϰāĻĨāĻŽ index-āϟāĻžāχ āĻĢ⧇āϰāϤ āφāϏ⧇, āĻāĻ•āχ āύāĻŋāϝāĻŧāĻŽāĨ¤

āϝ⧇ āϭ⧁āϞāϗ⧁āϞ⧋ āϏāĻŦāĻžāχ āĻ•āϰ⧇

ā§§. <numeric> āϞāĻŋāĻ–āϤ⧇ āϭ⧁āϞ⧇ āϝāĻžāĻ“āϝāĻŧāĻžāĨ¤

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> v{1, 2, 3};
    cout << accumulate(v.begin(), v.end(), 0) << '\n';
    return 0;
}

Runner-āĻāϰ flag-āĻ error: error: 'accumulate' was not declared in this scope, āφāϰ āĻ•āĻŋāϛ⧁ āύāĻžāĨ¤ map-āĻāϰ āĻŦ⧇āϞāĻžāϝāĻŧ GCC 12 āϝ⧇āĻŽāύ "did you forget to #include" note āĻĻ⧇āϝāĻŧ, accumulate-āĻāϰ āĻŦ⧇āϞāĻžāϝāĻŧ āĻĻ⧇āϝāĻŧ āύāĻž, āϤāĻžāχ message header-āĻāϰ āύāĻžāĻŽāχ āĻŦāϞ⧇ āύāĻžāĨ¤ #include <numeric> āϝ⧋āĻ— āĻ•āϰ⧋āĨ¤ āϤ⧁āĻŽāĻŋ āĻāϟāĻž āϭ⧁āϞāĻŦ⧇, āĻ•āĻžāϰāĻŖ āĻŽāύ⧇ āĻšāϝāĻŧ accumulate-āĻ“ sort-āĻāϰ āϏāĻžāĻĨ⧇ <algorithm>-āĻāχ āĻĨāĻžāĻ•āĻžāϰ āĻ•āĻĨāĻžāĨ¤

⧍. <algorithm> āϞāĻŋāĻ–āϤ⧇ āϭ⧁āϞ⧇ āϝāĻžāĻ“āϝāĻŧāĻžāĨ¤

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> v{3, 1, 2};
    cout << *max_element(v.begin(), v.end()) << '\n';
    reverse(v.begin(), v.end());
    return 0;
}

Runner-āĻāϰ flag-āĻ āĻĻ⧁āχāϟāĻž error: error: 'max_element' was not declared in this scope āφāϰ error: 'reverse' was not declared in this scope, āĻāĻŦāĻžāϰāĻ“ āϕ⧋āύ⧋ note āĻ›āĻžāĻĄāĻŧāĻžāĨ¤ āĻāĻ•āϟāĻž header āύ⧇āχ, āϤāĻžāχ āĻĒā§āϰāϤāĻŋāϟāĻž call-āĻāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻž āĻ•āϰ⧇ errorāĨ¤ āϛ⧋āϟ program-āĻ āϤ⧁āĻŽāĻŋ āĻāϟāĻž āϭ⧁āϞāĻŦ⧇, āϝ⧇āĻ–āĻžāύ⧇ <iostream> āφāϰ <vector>-āχ āϝāĻĨ⧇āĻˇā§āϟ āĻŽāύ⧇ āĻšāϝāĻŧāĨ¤

ā§Š. āϏāĻžāϜāĻžāύ⧋ āύāĻž āĻāĻŽāύ āĻ•ā§āϰāĻŽ āĻĨ⧇āϕ⧇ next_permutation āĻļ⧁āϰ⧁ āĻ•āϰāĻžāĨ¤

vector<int> friends{2, 1, 3};
int orders = 0;
do {
    orders++;
} while (next_permutation(friends.begin(), friends.end()));
cout << orders << '\n';

āϕ⧋āύ⧋ message āύ⧇āχ, āφāϰ print āĻšāϝāĻŧ 4, 6 āύāĻž: 1 2 3 āφāϰ 1 3 2 āĻļ⧁āϰ⧁āϰ āφāϗ⧇ āĻĒāĻĄāĻŧ⧇, āϤāĻžāχ āĻ•āĻ–āύ⧋ āφāϏ⧇ āύāĻžāĨ¤ Loop-āĻāϰ āφāϗ⧇ sort(friends.begin(), friends.end()) call āĻ•āϰ⧋āĨ¤ āϤ⧁āĻŽāĻŋ sort āĻŦāĻžāĻĻ āĻĻ⧇āĻŦ⧇, āĻ•āĻžāϰāĻŖ āύāĻŋāĻœā§‡āϰ āϞ⧇āĻ–āĻž vector-āϟāĻžāϕ⧇ āĻŽāύ⧇ āĻšāϝāĻŧ "āϏāĻŦ āĻŦāĻ¨ā§āϧ⧁ āϤ⧋ āφāϛ⧇āχ", āĻ•ā§āϰāĻŽā§‡ āϕ⧀ āφāϏ⧇ āϝāĻžāϝāĻŧāĨ¤

ā§Ē. 0 āĻĻāĻŋāϝāĻŧ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧇ double āϝ⧋āĻ— āĻ•āϰāĻžāĨ¤

vector<double> prices{1.5, 2.5, 3.5};
cout << accumulate(prices.begin(), prices.end(), 0) << '\n';

Runner-āĻāϰ flag-āĻ āϕ⧋āύ⧋ message āύ⧇āχ, āφāϰ print āĻšāϝāĻŧ 6, 7.5 āύāĻžāĨ¤ āĻļ⧁āϰ⧁āϰ āĻŽāĻžāύ 0 āĻāĻ•āϟāĻž int, āϤāĻžāχ āĻĒā§āϰāϤāĻŋāϟāĻž āϧāĻžāĻĒ āϕ⧇āĻŸā§‡ āĻĒā§‚āĻ°ā§āĻŖāϏāĻ‚āĻ–ā§āϝāĻž āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧāĨ¤ 0.0 āϞ⧇āĻ–ā§‹āĨ¤ āϤ⧁āĻŽāĻŋ 0 āϞāĻŋāĻ–āĻŦ⧇, āĻ•āĻžāϰāĻŖ āĻœā§€āĻŦāύ⧇ āϝāϤ āϝ⧋āĻ—āĻĢāϞ āϞāĻŋāϖ⧇āĻ›, āϏāĻŦāχ āĻ“āĻ­āĻžāĻŦ⧇ āĻļ⧁āϰ⧁ āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

āĻŽāĻžāĻĨāĻž āĻ–āĻžāϟāĻžāĻ“

Bob sort āĻ•āϰāϤ⧇ āϭ⧁āϞ⧇ āϝāĻžāϝāĻŧ, āφāϰ āĻ—ā§‹āύāĻžāϰ loop-āϟāĻž āϤāĻŋāύāϟāĻž āϏāĻ‚āĻ–ā§āϝāĻžāϰ āωāĻĒāϰ āϚāĻžāϞāĻžāϝāĻŧāĨ¤

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> v{3, 1, 2};
    int count = 0;
    do {
        count++;
    } while (next_permutation(v.begin(), v.end()));
    cout << count << '\n';
    for (int x : v) {
        cout << x << ' ';
    }
    cout << '\n';
    return 0;
}

count āϕ⧀ print āĻ•āϰāĻŦ⧇, āφāϰ loop-āĻāϰ āĻĒāϰ⧇ v āϕ⧇āĻŽāύ āĻĨāĻžāĻ•āĻŦ⧇? āϚāĻžāϞāĻžāύ⧋āϰ āφāϗ⧇ āĻĻ⧁āχāϟāĻžāϰāχ āωāĻ¤ā§āϤāϰ āĻĻāĻžāĻ“āĨ¤

1, 2 āφāϰ 3-āĻāϰ āĻ›āϝāĻŧāϟāĻž āĻ•ā§āϰāĻŽ dictionary order-āĻ āϞ⧇āĻ–ā§‹, āφāϰ āϤāĻžāϰ āĻŽāĻ§ā§āϝ⧇ 3 1 2 āϖ⧁āρāĻœā§‡ āĻŦ⧇āϰ āĻ•āϰ⧋āĨ¤ āϤāĻžāϰāĻĒāϰ āĻ­āĻžāĻŦā§‹, āĻļ⧇āώ call āϝāĻ–āύ false āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧ, āϤāĻ–āύ range-āϟāĻžāϰ āϕ⧀ āĻ•āϰ⧇āĨ¤

āĻ…āύ⧁āĻļā§€āϞāύ ā§§āϏāĻšāϜ

Zara āĻ“āϰ āϛ⧋āϟ āĻ­āĻžāχāϝāĻŧ⧇āϰ āϜāĻ¨ā§āϝ āĻ…āĻ•ā§āώāϰ⧇āϰ āϟāĻžāχāϞ⧇āϰ āĻāĻ•āϟāĻž āĻŦāĻžāĻ•ā§āϏ āĻĨ⧇āϕ⧇ āĻļāĻŦā§āĻĻ⧇āϰ āĻ•āĻžāĻ°ā§āĻĄ āĻŦāĻžāύāĻžāϝāĻŧāĨ¤ āĻāĻ•āϟāĻž āĻļāĻŦā§āĻĻ⧇āϰ āϟāĻžāχāϞāϗ⧁āϞ⧋ āϏ⧇ āϏāĻŽā§āĻ­āĻžāĻŦā§āϝ āĻĒā§āϰāϤāĻŋāϟāĻž āĻ•ā§āϰāĻŽā§‡ āĻŦāϏāĻžāϝāĻŧ, āφāϰ āϝāϤ āĻļāĻŦā§āĻĻ āĻŦāĻžāύāĻžāύ⧋ āϝāĻžāϝāĻŧ, āϏāĻŦ āϞāĻŋāϖ⧇ āϰāĻžāϖ⧇āĨ¤ āĻĻ⧁āχāϟāĻž āĻ•ā§āϰāĻŽ āĻāĻ•āχ āĻļāĻŦā§āĻĻ āĻŦāĻžāύāĻžāϞ⧇ āϏ⧇āϟāĻž āĻ—ā§‹āύāĻž āĻšāϝāĻŧ āĻāĻ•āĻŦāĻžāϰāĨ¤ āϤāĻžāϞāĻŋāĻ•āĻžāϟāĻž āϏ⧇ āϚāĻžāϝāĻŧ dictionary order-āĻ, āφāϰ āϏāĻŦāĻžāϰ āφāϗ⧇ āϤāĻžāϞāĻŋāĻ•āĻžāϰ āĻĻ⧈āĻ°ā§āĻ˜ā§āϝāĨ¤

Input. āĻāĻ• āϞāĻžāχāύ: 1 āĻĨ⧇āϕ⧇ 8āϟāĻž āϛ⧋āϟ āĻšāĻžāϤ⧇āϰ āχāĻ‚āϰ⧇āϜāĻŋ āĻ…āĻ•ā§āώāϰ⧇āϰ āĻāĻ•āϟāĻž āĻļāĻŦā§āĻĻ sāĨ¤

Output. āφāϞāĻžāĻĻāĻž āφāϞāĻžāĻĻāĻž āĻļāĻŦā§āĻĻ⧇āϰ āϏāĻ‚āĻ–ā§āϝāĻž k, āϤāĻžāϰāĻĒāϰ k-āϟāĻž āĻļāĻŦā§āĻĻ, āĻĒā§āϰāϤāĻŋ āϞāĻžāχāύ⧇ āĻāĻ•āϟāĻž, dictionary order-āĻāĨ¤

Constraints. s-āĻ 1 āĻĨ⧇āϕ⧇ 8āϟāĻž āĻ…āĻ•ā§āώāϰ, āĻĒā§āϰāϤāĻŋāϟāĻž a āĻĨ⧇āϕ⧇ z-āĻāϰ āĻŽāĻ§ā§āϝ⧇āĨ¤

Sample. Input bba āĻĻāĻŋāϞ⧇ 3, āϤāĻžāϰāĻĒāϰ abb, bab āφāϰ bbaāĨ¤ āĻĻ⧁āχāϟāĻž b āϟāĻžāχāϞ āĻ…āĻĻāϞāĻŦāĻĻāϞ āĻ•āϰāϞ⧇āĻ“ āĻāĻ•āχ āĻļāĻŦā§āĻĻ āĻšāϝāĻŧ, āϤāĻžāχ āϏ⧇āϟāĻž āĻ—ā§‹āύāĻž āĻšāϝāĻŧ āĻāĻ•āĻŦāĻžāϰāĨ¤

#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    string s;
    cin >> s;
    vector<string> words;   // every different word, in dictionary order

    // Visit every arrangement of the letters of s with next_permutation,
    // and add each one to words.

    cout << words.size() << '\n';
    for (const string& w : words) {
        cout << w << '\n';
    }
    return 0;
}

letter-orders āύāĻžāĻŽā§‡ grade āĻšāϝāĻŧāĨ¤ āĻāϟāĻž āĻāχ module-āĻāϰ problem set-āĻāϰ āĻāĻ•āϟāĻž free problemāĨ¤ Hidden test-āĻ āφāϛ⧇ āĻāĻ•āϟāĻžāĻŽāĻžāĻ¤ā§āϰ āĻ…āĻ•ā§āώāϰ, āφāϟāϟāĻž āĻāĻ•āχ āĻ…āĻ•ā§āώāϰ, āφāϰ āφāϟāϟāĻž āφāϞāĻžāĻĻāĻž āĻ…āĻ•ā§āώāϰ (40320āϟāĻž āĻļāĻŦā§āĻĻ)āĨ¤ āφāϰāĻ“ āφāϛ⧇ āωāĻ˛ā§āĻŸā§‹ āĻ•ā§āϰāĻŽā§‡ āϟāĻžāχāĻĒ āĻ•āϰāĻž āĻ…āĻ•ā§āώāϰ, āφāϰ āĻāĻ•āχ āĻ…āĻ•ā§āώāϰ āĻāĻ•āĻžāϧāĻŋāĻ•āĻŦāĻžāϰ āφāϛ⧇ āĻāĻŽāύ āĻļāĻŦā§āĻĻāĨ¤

Run in Compiler
āĻ…āύ⧁āĻļā§€āϞāύ ⧍āĻŽāĻžāĻāĻžāϰāĻŋ

Zara āφāϝāĻŧāύāĻž-āĻļāĻŦā§āĻĻ āϜāĻŽāĻžāϝāĻŧ, āĻŽāĻžāύ⧇ āĻāĻŽāύ āĻļāĻŦā§āĻĻ āϝ⧇āϟāĻž āωāĻ˛ā§āĻŸā§‹ āĻĻāĻŋāĻ• āĻĨ⧇āϕ⧇ āĻĒāĻĄāĻŧāϞ⧇āĻ“ āĻāĻ•āχ āĻĨāĻžāϕ⧇, āϝ⧇āĻŽāύ level āφāϰ noonāĨ¤ āĻ“āϰ āĻ•āĻžāϛ⧇ āĻļāĻŦā§āĻĻ⧇āϰ āĻāĻ•āϟāĻž āϤāĻžāϞāĻŋāĻ•āĻž āφāϛ⧇, āφāϰ āϏ⧇ āϜāĻžāύāϤ⧇ āϚāĻžāϝāĻŧ āϤāĻžāϰ āĻ•āϝāĻŧāϟāĻž āφāϝāĻŧāύāĻž-āĻļāĻŦā§āĻĻ, āφāϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϞāĻŽā§āĻŦāĻž āφāϝāĻŧāύāĻž-āĻļāĻŦā§āĻĻ āϕ⧋āύāϟāĻžāĨ¤

Input. āĻāĻ• āϞāĻžāχāύ⧇ n, āϤāĻžāϰāĻĒāϰ n-āϟāĻž āĻļāĻŦā§āĻĻ, space āĻŦāĻž āύāϤ⧁āύ āϞāĻžāχāύ āĻĻāĻŋāϝāĻŧ⧇ āφāϞāĻžāĻĻāĻžāĨ¤

Output. āϞāĻžāχāύ 1: āĻļāĻŦā§āĻĻāϗ⧁āϞ⧋āϰ āĻ•āϝāĻŧāϟāĻž āφāϝāĻŧāύāĻž-āĻļāĻŦā§āĻĻāĨ¤ āϞāĻžāχāύ 2: āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϞāĻŽā§āĻŦāĻž āφāϝāĻŧāύāĻž-āĻļāĻŦā§āĻĻ; āϏāĻŽāĻžāύ āϞāĻŽā§āĻŦāĻž āĻ•āϝāĻŧ⧇āĻ•āϟāĻž āĻĨāĻžāĻ•āϞ⧇ āϤāĻžāϞāĻŋāĻ•āĻžāϝāĻŧ āϝ⧇āϟāĻž āφāϗ⧇, āϏ⧇āϟāĻž; āφāϰ āĻāĻ•āϟāĻžāĻ“ āύāĻž āĻĨāĻžāĻ•āϞ⧇ noneāĨ¤

Constraints. 1 <= n <= 100000āĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻž āĻļāĻŦā§āĻĻ 1 āĻĨ⧇āϕ⧇ 20āϟāĻž āϛ⧋āϟ āĻšāĻžāϤ⧇āϰ āχāĻ‚āϰ⧇āϜāĻŋ āĻ…āĻ•ā§āώāϰāĨ¤

Sample. Input 6 āφāϰ level noon map racecar wow tea āĻĻāĻŋāϞ⧇ 4, āϤāĻžāϰāĻĒāϰ racecarāĨ¤ āφāϝāĻŧāύāĻž-āĻļāĻŦā§āĻĻāϗ⧁āϞ⧋ āĻšāϞ⧋ level, noon, racecar āφāϰ wowāĨ¤

#include <algorithm>
#include <iostream>
#include <string>
using namespace std;

int main() {
    int n;
    cin >> n;
    int mirrors = 0;       // how many words read the same backwards
    string longest = "";   // the longest of them so far

    for (int i = 0; i < n; i++) {
        string word;
        cin >> word;
        // Make a reversed copy of word with reverse. If the two are equal,
        // count the word, and keep it if it is longer than longest.
    }

    // Line 1: mirrors. Line 2: longest, or none if no word was a mirror.

    return 0;
}

āφāϞāĻžāĻĻāĻž āĻ•āϰ⧇ grade āĻšāϝāĻŧ āύāĻžāĨ¤ āĻļāĻŦā§āĻĻāϟāĻžāϰ āĻāĻ•āϟāĻž copy āĻŦāĻžāύāĻžāĻ“, copy-āϟāĻžāϕ⧇ reverse āĻ•āϰ⧋, āφāϰ āĻĻ⧁āχāϟāĻž string == āĻĻāĻŋāϝāĻŧ⧇ āĻŽā§‡āϞāĻžāĻ“āĨ¤ āϕ⧋āύ⧋ āĻļāĻŦā§āĻĻ āϰāĻžāĻ–ā§‹ āĻļ⧁āϧ⧁ āϤāĻ–āύāχ, āϝāĻ–āύ āϏ⧇āϟāĻž āĻšāĻžāϤ⧇āϰ āĻļāĻŦā§āĻĻ⧇āϰ āĻšā§‡āϝāĻŧ⧇ āϏāĻ¤ā§āϝāĻŋāχ āϞāĻŽā§āĻŦāĻž; āϤāĻžāĻšāϞ⧇ āϏāĻŽāĻžāύ āϞāĻŽā§āĻŦāĻžāĻĻ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻĒā§āϰāĻĨāĻŽāϟāĻžāχ āĻĨ⧇āϕ⧇ āϝāĻžāϝāĻŧāĨ¤

Run in Compiler
āĻ…āύ⧁āĻļā§€āϞāύ ā§ŠāĻ•āĻ āĻŋāύ

Kenji-āϰ āĻ•āĻžāϛ⧇ āĻ•āϝāĻŧ⧇āĻ•āϟāĻž āϏāĻ‚āĻ–ā§āϝāĻžāϰ āĻ•āĻžāĻ°ā§āĻĄ āφāϛ⧇āĨ¤ āϏāĻŦāϗ⧁āϞ⧋ āĻāĻ• āϏāĻžāϰāĻŋāϤ⧇ āĻŦāϏāĻŋāϝāĻŧ⧇ āϏ⧇ āĻāĻ•āϟāĻž āϞāĻŽā§āĻŦāĻž āϏāĻ‚āĻ–ā§āϝāĻž āĻŦāĻžāύāĻžāϝāĻŧ, āφāϰ āϚāĻžāϝāĻŧ āϝāϤ āĻŦāĻĄāĻŧ āϏāĻŽā§āĻ­āĻŦ āϏāĻ‚āĻ–ā§āϝāĻžāĨ¤ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ āĻ•āĻžāĻ°ā§āĻĄāϟāĻž āφāϗ⧇ āĻŦāϏāĻžāϞ⧇āχ āĻšāϝāĻŧ āύāĻž: 3 āφāϰ 30 āĻāĻ• āĻ­āĻžāĻŦ⧇ āĻŦāϏāĻžāϞ⧇ 330, āφāϰ⧇āĻ• āĻ­āĻžāĻŦ⧇ 303āĨ¤

Input. āĻāĻ• āϞāĻžāχāύ⧇ n, āϤāĻžāϰāĻĒāϰ āĻ•āĻžāĻ°ā§āĻĄāϗ⧁āϞ⧋āϰ n-āϟāĻž āϏāĻ‚āĻ–ā§āϝāĻžāĨ¤

Output. āĻāĻ• āϞāĻžāχāύ: āĻ•āĻžāĻ°ā§āĻĄāϗ⧁āϞ⧋ āϏāĻžāϰāĻŋāϤ⧇ āĻŦāϏāĻŋāϝāĻŧ⧇ āĻŦāĻžāύāĻžāύ⧋ āϝāĻžāϝāĻŧ āĻāĻŽāύ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ āϏāĻ‚āĻ–ā§āϝāĻžāĨ¤

Constraints. 1 <= n <= 8āĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻž āĻ•āĻžāĻ°ā§āĻĄā§‡ 1 āĻĨ⧇āϕ⧇ 999-āĻāϰ āĻāĻ•āϟāĻž āĻĒā§‚āĻ°ā§āĻŖāϏāĻ‚āĻ–ā§āϝāĻžāĨ¤

Sample. Input 5 āφāϰ 3 30 34 5 9 āĻĻāĻŋāϞ⧇ 9534330, āĻ•ā§āϰāĻŽāϟāĻž 9, 5, 34, 3, 30āĨ¤

#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main() {
    int n;
    cin >> n;
    vector<string> cards(n);   // each card's number, kept as text
    for (string& c : cards) {
        cin >> c;
    }
    string best = "";   // the biggest number found so far

    // Try every order of the cards. For each order, join the cards into one
    // string; keep it if it is a bigger number than best. Every joined string
    // has the same length, so comparing two of them as strings works.
    // Print best.

    return 0;
}

āφāϞāĻžāĻĻāĻž āĻ•āϰ⧇ grade āĻšāϝāĻŧ āύāĻžāĨ¤ Lesson āϝ⧇ āĻ•āĻĨāĻžāϟāĻž āĻļ⧁āϧ⧁ āχāĻ™ā§āĻ—āĻŋāϤ⧇ āĻŦāϞ⧇āϛ⧇: next_permutation string-āĻāϰ vector-āĻāϰ āωāĻĒāϰāĻ“ āϚāϞ⧇, āĻ“āĻĻ⧇āϰ dictionary order āϧāϰ⧇āĨ¤ āφāϟāϟāĻž āĻ•āĻžāĻ°ā§āĻĄā§‡ āĻŦāĻĄāĻŧāĻœā§‹āϰ 40320āϟāĻž āĻ•ā§āϰāĻŽ, āϏāĻŦāϗ⧁āϞ⧋ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧇ āĻĻ⧇āĻ–āĻžāϰ āĻŽāϤ⧋ āĻ•āĻŽāĨ¤

Run in Compiler

āϏāϚāϰāĻžāϚāϰ āϝ⧇ āĻĒā§āϰāĻļā§āύāϗ⧁āϞ⧋ āφāϏ⧇

  • āϏāĻžāϧāĻžāϰāĻŖ while āύāĻž, do-while āϕ⧇āύ?

    āϏāĻžāϧāĻžāϰāĻŖ while (next_permutation(...)) body āĻāĻ•āĻŦāĻžāϰ āϚāϞāĻžāϰ āφāϗ⧇āχ function-āϟāĻž call āĻ•āϰ⧇ āĻĢ⧇āϞ⧇āĨ¤ āϤāĻžāĻšāϞ⧇ āĻļ⧁āϰ⧁āϰ āĻ•ā§āϰāĻŽāϟāĻž āĻ•āĻžāĻœā§‡ āϞāĻžāĻ—āĻžāύ⧋āϰ āφāϗ⧇āχ āϏāϰ⧇ āϝ⧇āϤ, āφāϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϛ⧋āϟ āĻ•ā§āϰāĻŽāϟāĻž āĻšāĻžāϰāĻŋāϝāĻŧ⧇ āϝ⧇āϤāĨ¤ Do-while āφāϗ⧇ āĻ•ā§āϰāĻŽāϟāĻž āĻ•āĻžāĻœā§‡ āϞāĻžāĻ—āĻžāϝāĻŧ, āϤāĻžāϰāĻĒāϰ āϏāϰāĻžāϝāĻŧāĨ¤

  • āĻāχ call-āϗ⧁āϞ⧋ āĻ•āĻŋ array āφāϰ string-āĻāĻ“ āϚāϞ⧇?

    āĻšā§āϝāĻžāρāĨ¤ Algorithm-āĻāϰ āĻĻāϰāĻ•āĻžāϰ āĻļ⧁āϧ⧁ āĻĻ⧁āχāϟāĻž iterator, āφāϰ pointer-āĻ“ iterator-āĻāϰ āĻ•āĻžāϜ āĻ•āϰ⧇, āϤāĻžāχ accumulate(a, a + n, 0) n-āϟāĻž int-āĻāϰ āĻāĻ•āϟāĻž āϏāĻžāϧāĻžāϰāĻŖ array āϝ⧋āĻ— āĻ•āϰ⧇āĨ¤ āĻāĻ•āϟāĻž string-āĻāϰ begin() āφāϰ end()-āĻ“ āϚāϞ⧇, Kenji-āϰ āϤāĻžāϞāĻžāϝāĻŧ āϝ⧇āĻŽāύ āĻĻ⧇āĻ–āϞ⧇āĨ¤

  • accumulate āĻ•āĻŋ āφāĻŽāĻžāϰ āύāĻŋāĻœā§‡āϰ loop-āĻāϰ āĻšā§‡āϝāĻŧ⧇ āĻĻā§āϰ⧁āϤ?

    āύāĻž, āφāĻŦāĻžāϰ āϧ⧀āϰāĻ“ āύāĻžāĨ¤ āĻĻ⧁āĻŸā§‹āχ āĻĒā§āϰāϤāĻŋāϟāĻž element āĻāĻ•āĻŦāĻžāϰ āĻĻ⧇āϖ⧇, O(n), āφāϰ lesson 04 āĻĻ⧁āĻŸā§‹āϕ⧇ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āĻŽāĻžāĻĒāĻŦ⧇āĨ¤ Call āĻœā§‡āϤ⧇ āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āϞ⧇āĻ–āĻžāϝāĻŧ, āφāϰ āϝ⧇ bug āĻ“āϰ āĻšāϤ⧇āχ āĻĒāĻžāϰ⧇ āύāĻž āϤāĻžāϤ⧇, āĻ—āϤāĻŋāϤ⧇ āύāĻžāĨ¤

  • āĻ–āĻžāϞāĻŋ vector-āĻ max_element āϕ⧀ āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧ?

    end(), āĻ•āĻžāϰāĻŖ āĻĻ⧇āĻ–āĻžāύ⧋āϰ āĻŽāϤ⧋ āϕ⧋āύ⧋ element āύ⧇āχāĨ¤ *end() āĻĒāĻĄāĻŧāĻž āĻšāϞ⧋ undefined behaviour, āϤāĻžāχ āωāĻ¤ā§āϤāϰ āĻĒāĻĄāĻŧāĻžāϰ āφāϗ⧇ v.empty() check āĻ•āϰ⧇ āύāĻžāĻ“āĨ¤

āĻŽā§‚āϞ āĻ•āĻĨāĻž

  • āĻāĻ•āϟāĻž algorithm āĻāĻ•āϟāĻž range [first, last) āύ⧇āϝāĻŧ: first āύ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ, last āύāĻžāĨ¤ āĻšāĻŋāϏāĻžāĻŦ⧇āϰ algorithm-āϗ⧁āϞ⧋ āĻĨāĻžāϕ⧇ <numeric>-āĻ, āĻŦāĻžāĻ•āĻŋāϰāĻž <algorithm>-āĻāĨ¤
  • accumulate, count, max_element āφāϰ reverse āĻĒā§āϰāϤāĻŋāϟāĻž āĻāĻ•āϟāĻž āĻ•āϰ⧇ āĻšāĻžāϤ⧇ āϞ⧇āĻ–āĻž loop-āĻāϰ āϜāĻžāϝāĻŧāĻ—āĻž āύ⧇āϝāĻŧ, āĻāĻ•āχ O(n)-āĻ, āφāϰ āϭ⧁āϞ āĻ•āϰāĻžāϰ āĻŽāϤ⧋ āϕ⧋āύ⧋ index āĻ›āĻžāĻĄāĻŧāĻžāχāĨ¤
  • āφāϗ⧇ sort, āϤāĻžāϰāĻĒāϰ do { } while (next_permutation(...)): āĻĒā§āϰāϤāĻŋāϟāĻž āĻ•ā§āϰāĻŽ āĻāĻ•āĻŦāĻžāϰ āĻ•āϰ⧇ āφāϏ⧇, āϛ⧋āϟ āĻĨ⧇āϕ⧇ āĻŦāĻĄāĻŧāϤ⧇; āϕ⧋āύ⧋ āĻŽāĻžāύ āĻĻ⧁āχāĻŦāĻžāϰ āĻĨāĻžāĻ•āϞ⧇ āĻĒā§āϰāϤāĻŋāϟāĻž āφāϞāĻžāĻĻāĻž āĻ•ā§āϰāĻŽ āφāϏ⧇ āĻāĻ•āĻŦāĻžāϰāĨ¤
  • accumulate āϝ⧋āĻ—āĻĢāϞ āϰāĻžāϖ⧇ āĻļ⧁āϰ⧁āϰ āĻŽāĻžāύ⧇āϰ type-āĻ: āĻŦāĻĄāĻŧ āϝ⧋āĻ—āĻĢāϞ⧇ 0LL, āĻ­āĻ—ā§āύāĻžāĻ‚āĻļ⧇ 0.0āĨ¤
  • n-āϟāĻž āϜāĻŋāύāĻŋāϏ⧇āϰ āĻ•ā§āϰāĻŽ n!-āϟāĻž: 10āϟāĻž āϜāĻŋāύāĻŋāϏ⧇āϰ 3628800āϟāĻž āĻ•ā§āϰāĻŽ āĻāĻ—āĻžāϰ⧋āĻŦāĻžāϰ⧇ āϞ⧇āϗ⧇āϛ⧇ 7.4 āĻĨ⧇āϕ⧇ 16.8 ms, āφāϰ āĻĒā§āϰāϤāĻŋāϟāĻž āĻŦāĻžāĻĄāĻŧāϤāĻŋ āϜāĻŋāύāĻŋāϏ āϏāĻŽāϝāĻŧāϟāĻžāϕ⧇ āϗ⧁āĻŖ āĻ•āϰ⧇ āĻŦāĻžāĻĄāĻŧāĻžāϝāĻŧāĨ¤
  • āφāϰāĻ“ āĻ—āĻ­ā§€āϰ⧇ āϝ⧇āϤ⧇ āϚāĻžāχāϞ⧇: Under the Hood, introselect, next_permutation-āĻāϰ āϚāĻžāϰāϟāĻž āϚāĻžāϞ āφāϰ āϝ⧇ āϝ⧋āĻ—āĻĢāϞ āϘ⧁āϰ⧇ āϝāĻžāϝāĻŧ (Pro)āĨ¤

āĻāϰāĻĒāϰ lesson 02 āĻāχ āϏāĻžāĻĒā§āϤāĻžāĻšāĻŋāĻ• set-āĻāϰ āĻĒā§āϰāϤāĻŋāϟāĻž algorithm āĻāĻ•āϟāĻž āĻāĻ•āϟāĻž āĻ•āϰ⧇ āĻĻ⧇āĻ–āĻžāĻŦ⧇, āĻĒā§āϰāϤāĻŋāϟāĻžāϰ āĻ–āϰāϚāϏāĻšāĨ¤

lesson ā§§ āĻļ⧇āώ

āĻļ⧇āώ āĻšāϞ⧇ āϚāĻŋāĻšā§āύ āĻĻāĻŋāύ, āĻ…āĻ—ā§āϰāĻ—āϤāĻŋ āφāĻĒāύāĻžāϰ āϏāĻžāĻĨ⧇ āĻĨāĻžāĻ•āĻŦ⧇āĨ¤

āĻĒāϰ⧇āϰāϟāĻž: āϏāĻžāĻĒā§āϤāĻžāĻšāĻŋāĻ• algorithm-āϗ⧁āϞ⧋āϰ āĻĒā§āϰāϤāĻŋāϟāĻž, āĻāĻ•āϟāĻž āĻāĻ•āϟāĻž āĻ•āϰ⧇, āĻ–āϰāϚāϏāĻš