c_cpp Eb中音萨克斯风手

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp Eb中音萨克斯风手相关的知识,希望对你有一定的参考价值。

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

vector<size_t> count_each_finger_presses(const string &song)
{
    typedef bitset<10> fingers;
    static const map<char, fingers> table
    {
        { 'c', fingers("0111001111") },
        { 'd', fingers("0111001110") },
        { 'e', fingers("0111001100") },
        { 'f', fingers("0111001000") },
        { 'g', fingers("0111000000") },
        { 'a', fingers("0110000000") },
        { 'b', fingers("0100000000") },
        { 'C', fingers("0010000000") },
        { 'D', fingers("1111001110") },
        { 'E', fingers("1111001100") },
        { 'F', fingers("1111001000") },
        { 'G', fingers("1111000000") },
        { 'A', fingers("1110000000") },
        { 'B', fingers("1100000000") },
    };

    vector<fingers> diff(song.size());
    transform(song.begin(), song.end(), diff.begin(), [](char note)
    {
        return table.at(note);
    });
    adjacent_difference(diff.begin(), diff.end(), diff.begin(), [](const fingers &curr, const fingers &prev)
    {
        return curr&~prev;
    });

    vector<size_t> sum(10, 0);
    for (const auto &f : diff)
    {
        for (size_t i = 0; i < f.size(); i++)
        {
            if (f[i]) sum[i]++;
        }
    }
    reverse(sum.begin(), sum.end());
    return sum;
}

template <typename T>
string join(const vector<T> &v)
{
    string s;
    for (const auto &x : v) s += (s.empty() ? "" : " ") + to_string(x);
    return s;
}

void test_case()
{
    string song;
    getline(cin, song);
    cout << join(count_each_finger_presses(song)) << endl;
}

int main()
{
    size_t n;
    cin >> n;
    cin.ignore(1, '\n');
    while (n--) test_case();
    return 0;
}

以上是关于c_cpp Eb中音萨克斯风手的主要内容,如果未能解决你的问题,请参考以下文章

如何演奏萨克斯风?

萨克斯谱Taylor Swift - Daylight 曙光 最好听的萨克斯演绎

c_cpp 驱动0.96“IIC I2C 128x64 OLED LCD显示模块M45(具有SSD1306驱动器IC)连接到ESP-01模块(0 = SDA,2 = SCL)http://www.eb

WordPress 6.2 “Dolphy 海豚”

如何从 FFT 中获取低音、中音、高音数据

P2614 计算器弹琴