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 计算器弹琴