Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // solve.cpp: general file project.
- #include <functional>
- #include <algorithm>
- #include <utility>
- #include <cassert>
- #include <cmath>
- #include <ctime>
- #include <numeric>
- #include <iomanip>
- #include <complex>
- #include <float.h>
- #include <cfloat>
- #include <iostream>
- #include <cstdlib>
- #include <fstream>
- #include <sstream>
- #include <stdio.h>
- #include <cstdio>
- #include <cstring>
- #include <string>
- #include <iterator>
- #include <vector>
- #include <bitset>
- #include <deque>
- #include <stack>
- #include <queue>
- #include <list>
- #include <set>
- #include <map>
- using namespace std;
- #define foreach(it, v, type) for( type::iterator it = v.begin(); it != v.end() ; it++)
- #define forn(i, st, en) for(int i = (int)(st); i <= (int)(en); i++)
- #define ford(i, en, st) for(int i = (int)(en); i >= (int)(st); i--)
- #define zero(a, w) memset(a, w, sizeof(a))
- #define all(a) a.begin(), a.end()
- #define sz(a) a.size()
- #define msg(x) cout << #x << " = " << x << endl;
- const int SIZE = 12;
- const long double Lambda = 0.34;
- const long double base = 440.0;
- const long double two = 2.0;
- int n, L0, a[SIZE], m;
- long double aS[(1<<SIZE)], fS[(1<<SIZE)];
- map<string, long double> MAP;
- void makeMap() {
- MAP["C0"] = base * powl(two, -21.0/ 12);
- MAP["C#0"] = base * powl(two, -20.0/ 12);
- MAP["D0"] = base * powl(two, -19.0/ 12);
- MAP["D#0"] = base * powl(two, -18.0/ 12);
- MAP["E0"] = base * powl(two, -17.0/ 12);
- MAP["E#0"] = base * powl(two, -16.0/ 12);
- MAP["F0"] = base * powl(two, -16.0/ 12);
- MAP["F#0"] = base * powl(two, -15.0/ 12);
- MAP["G0"] = base * powl(two, -14.0/ 12);
- MAP["G#0"] = base * powl(two, -13.0/ 12);
- MAP["A0"] = base * powl(two, -12.0/ 12);
- MAP["A#0"] = base * powl(two, -11.0/ 12);
- MAP["B0"] = base * powl(two, -10.0/ 12);
- MAP["B#0"] = base * powl(two, -9.0/ 12);
- MAP["C1"] = base * powl(two, -9.0/ 12);
- MAP["C#1"] = base * powl(two, -8.0/ 12);
- MAP["D1"] = base * powl(two, -7.0/ 12);
- MAP["D#1"] = base * powl(two, -6.0/ 12);
- MAP["E1"] = base * powl(two, -5.0/ 12);
- MAP["E#1"] = base * powl(two, -4.0/ 12);
- MAP["F1"] = base * powl(two, -4.0/ 12);
- MAP["F#1"] = base * powl(two, -3.0/ 12);
- MAP["G1"] = base * powl(two, -2.0/ 12);
- MAP["G#1"] = base * powl(two, -1.0/ 12);
- MAP["A1"] = base;
- MAP["A#1"] = base * powl(two, 1.0/ 12);
- MAP["B1"] = base * powl(two, 2.0/ 12);
- MAP["B#1"] = base * powl(two, 3.0/ 12);
- MAP["C2"] = base * powl(two, 3.0/ 12);
- MAP["C#2"] = base * powl(two, 4.0/ 12);
- MAP["D2"] = base * powl(two, 5.0/ 12);
- MAP["D#2"] = base * powl(two, 6.0/ 12);
- MAP["E2"] = base * powl(two, 7.0/ 12);
- MAP["E#2"] = base * powl(two, 7.0/ 12);
- MAP["F2"] = base * powl(two, 8.0/ 12);
- MAP["F#2"] = base * powl(two, 9.0/ 12);
- MAP["G2"] = base * powl(two, 10.0/ 12);
- MAP["G#2"] = base * powl(two, 11.0/ 12);
- MAP["A2"] = base * powl(two, 12.0/ 12);;
- MAP["A#2"] = base * powl(two, 13.0/ 12);
- MAP["B2"] = base * powl(two, 14.0/ 12);
- MAP["B#2"] = base * powl(two, 15.0/ 12);
- MAP["C3"] = base * powl(two, 15.0/ 12);
- MAP["C#3"] = base * powl(two, 16.0/ 12);
- MAP["D3"] = base * powl(two, 17.0/ 12);
- MAP["D#3"] = base * powl(two, 18.0/ 12);
- MAP["E3"] = base * powl(two, 19.0/ 12);
- MAP["E#3"] = base * powl(two, 20.0/ 12);
- MAP["F3"] = base * powl(two, 20.0/ 12);
- MAP["F#3"] = base * powl(two, 21.0/ 12);
- MAP["G3"] = base * powl(two, 22.0/ 12);
- MAP["G#3"] = base * powl(two, 23.0/ 12);
- MAP["A3"] = base * powl(two, 24.0/ 12);;
- MAP["A#3"] = base * powl(two, 25.0/ 12);
- MAP["B3"] = base * powl(two, 26.0/ 12);
- MAP["B#3"] = base * powl(two, 27.0/ 12);
- MAP["C4"] = base * powl(two, 27.0/ 12);
- MAP["C#4"] = base * powl(two, 28.0/ 12);
- MAP["D4"] = base * powl(two, 29.0/ 12);
- MAP["D#4"] = base * powl(two, 30.0/ 12);
- MAP["E4"] = base * powl(two, 31.0/ 12);
- MAP["E#4"] = base * powl(two, 32.0/ 12);
- MAP["F4"] = base * powl(two, 32.0/ 12);
- MAP["F#4"] = base * powl(two, 33.0/ 12);
- MAP["G4"] = base * powl(two, 34.0/ 12);
- MAP["G#4"] = base * powl(two, 35.0/ 12);
- MAP["A4"] = base * powl(two, 36.0/ 12);;
- MAP["A#4"] = base * powl(two, 37.0/ 12);
- MAP["B4"] = base * powl(two, 38.0/ 12);
- MAP["B#4"] = base * powl(two, 39.0/ 12);
- MAP["C5"] = base * powl(two, 39.0/ 12);
- MAP["C#5"] = base * powl(two, 40.0/ 12);
- MAP["D5"] = base * powl(two, 41.0/ 12);
- MAP["D#5"] = base * powl(two, 42.0/ 12);
- MAP["E5"] = base * powl(two, 43.0/ 12);
- MAP["E#5"] = base * powl(two, 44.0/ 12);
- MAP["F5"] = base * powl(two, 44.0/ 12);
- MAP["F#5"] = base * powl(two, 45.0/ 12);
- MAP["G5"] = base * powl(two, 46.0/ 12);
- MAP["G#5"] = base * powl(two, 47.0/ 12);
- MAP["A5"] = base * powl(two, 48.0/ 12);;
- MAP["A#5"] = base * powl(two, 49.0/ 12);
- MAP["B5"] = base * powl(two, 50.0/ 12);
- }
- int main() {
- freopen("input.txt","r",stdin);
- freopen("output.txt","w",stdout);
- scanf("%d %d\n",&n, &L0);
- for(int i = 0; i < n; ++i)
- scanf("%d",&a[i]);
- scanf("\n");
- int nS = (1 << n);
- for(int i = 0; i < nS; ++i) {
- aS[i] = 0;
- for(int j = 0; j < n; ++j)
- if((i & (1 << j)) > 0) aS[i] += a[j];
- fS[i] = Lambda / ((long double)L0 + aS[i]);
- }
- makeMap();
- scanf("%d\n",&m);
- for(int i = 0; i < m; ++i) {
- string note;
- getline(cin, note);
- long double f0 = MAP[note];
- long double minD = abs(f0 - fS[0]);
- int index = 0;
- for(int j = 0; j < nS; ++j)
- if(abs(f0 - fS[j]) < minD) {
- index = j;
- minD = abs(f0 - fS[j]);
- }
- for(int j = 0; j < n; ++j)
- if((index & (1 << j)) > 0) printf("o"); else printf(".");
- printf(" ");
- int number = (int)ceil((long double)(2.0) * (long double)L0 / (long double)aS[index]);
- printf("%d ",number);
- long double C = 12 * abs(logl(f0 / (long double)index) / logl(2.0));
- printf("%.10Lf",C);
- printf("\n");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement