Advertisement
Guest User

Untitled

a guest
Jun 25th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.72 KB | None | 0 0
  1. // solve.cpp: general file project.
  2.  
  3. #include <functional>
  4. #include <algorithm>
  5. #include <utility>
  6. #include <cassert>
  7. #include <cmath>
  8. #include <ctime>
  9.  
  10. #include <numeric>
  11. #include <iomanip>
  12. #include <complex>
  13. #include <float.h>
  14. #include <cfloat>
  15.  
  16. #include <iostream>
  17. #include <cstdlib>
  18. #include <fstream>
  19. #include <sstream>
  20. #include <stdio.h>
  21. #include <cstdio>
  22.  
  23. #include <cstring>
  24. #include <string>
  25.  
  26. #include <iterator>
  27. #include <vector>
  28. #include <bitset>
  29. #include <deque>
  30. #include <stack>
  31. #include <queue>
  32. #include <list>
  33. #include <set>
  34. #include <map>
  35. using namespace std;
  36.  
  37. #define foreach(it, v, type) for( type::iterator it = v.begin(); it != v.end() ; it++)
  38. #define forn(i, st, en) for(int i = (int)(st); i <= (int)(en); i++)
  39. #define ford(i, en, st) for(int i = (int)(en); i >= (int)(st); i--)
  40. #define zero(a, w) memset(a, w, sizeof(a))
  41. #define all(a) a.begin(), a.end()
  42. #define sz(a) a.size()
  43.  
  44. #define msg(x) cout << #x << " = " << x << endl;
  45.  
  46. const int SIZE = 12;
  47. const long double Lambda = 0.34;
  48. const long double base = 440.0;
  49. const long double two = 2.0;
  50.  
  51. int n, L0, a[SIZE], m;
  52. long double aS[(1<<SIZE)], fS[(1<<SIZE)];
  53. map<string, long double> MAP;
  54.  
  55. void makeMap() {
  56.  MAP["C0"] =  base * powl(two, -21.0/ 12);
  57.  MAP["C#0"] =  base * powl(two, -20.0/ 12);
  58.  MAP["D0"] =  base * powl(two, -19.0/ 12);
  59.  MAP["D#0"] =  base * powl(two, -18.0/ 12);
  60.  MAP["E0"] =  base * powl(two, -17.0/ 12);
  61.  MAP["E#0"] =  base * powl(two, -16.0/ 12);
  62.  MAP["F0"] =  base * powl(two, -16.0/ 12);
  63.  MAP["F#0"] =  base * powl(two, -15.0/ 12);
  64.  MAP["G0"] =  base * powl(two, -14.0/ 12);
  65.  MAP["G#0"] =  base * powl(two, -13.0/ 12);
  66.  MAP["A0"] =  base * powl(two, -12.0/ 12);
  67.  MAP["A#0"] =  base * powl(two, -11.0/ 12);
  68.  MAP["B0"] =  base * powl(two, -10.0/ 12);
  69.  MAP["B#0"] =  base * powl(two, -9.0/ 12);
  70.  
  71.  MAP["C1"] =  base * powl(two, -9.0/ 12);
  72.  MAP["C#1"] =  base * powl(two, -8.0/ 12);
  73.  MAP["D1"] =  base * powl(two, -7.0/ 12);
  74.  MAP["D#1"] =  base * powl(two, -6.0/ 12);
  75.  MAP["E1"] =  base * powl(two, -5.0/ 12);
  76.  MAP["E#1"] =  base * powl(two, -4.0/ 12);
  77.  MAP["F1"] =  base * powl(two, -4.0/ 12);
  78.  MAP["F#1"] =  base * powl(two, -3.0/ 12);
  79.  MAP["G1"] =  base * powl(two, -2.0/ 12);
  80.  MAP["G#1"] =  base * powl(two, -1.0/ 12);
  81.  MAP["A1"] =  base;
  82.  MAP["A#1"] =  base * powl(two, 1.0/ 12);
  83.  MAP["B1"] =  base * powl(two, 2.0/ 12);
  84.  MAP["B#1"] =  base * powl(two, 3.0/ 12);
  85.  
  86.  MAP["C2"] =  base * powl(two, 3.0/ 12);
  87.  MAP["C#2"] =  base * powl(two, 4.0/ 12);
  88.  MAP["D2"] =  base * powl(two, 5.0/ 12);
  89.  MAP["D#2"] =  base * powl(two, 6.0/ 12);
  90.  MAP["E2"] =  base * powl(two, 7.0/ 12);
  91.  MAP["E#2"] =  base * powl(two, 7.0/ 12);
  92.  MAP["F2"] =  base * powl(two, 8.0/ 12);
  93.  MAP["F#2"] =  base * powl(two, 9.0/ 12);
  94.  MAP["G2"] =  base * powl(two, 10.0/ 12);
  95.  MAP["G#2"] =  base * powl(two, 11.0/ 12);
  96.  MAP["A2"] =  base * powl(two, 12.0/ 12);;
  97.  MAP["A#2"] =  base * powl(two, 13.0/ 12);
  98.  MAP["B2"] =  base * powl(two, 14.0/ 12);
  99.  MAP["B#2"] =  base * powl(two, 15.0/ 12);
  100.  
  101.  MAP["C3"] =  base * powl(two, 15.0/ 12);
  102.  MAP["C#3"] =  base * powl(two, 16.0/ 12);
  103.  MAP["D3"] =  base * powl(two, 17.0/ 12);
  104.  MAP["D#3"] =  base * powl(two, 18.0/ 12);
  105.  MAP["E3"] =  base * powl(two, 19.0/ 12);
  106.  MAP["E#3"] =  base * powl(two, 20.0/ 12);
  107.  MAP["F3"] =  base * powl(two, 20.0/ 12);
  108.  MAP["F#3"] =  base * powl(two, 21.0/ 12);
  109.  MAP["G3"] =  base * powl(two, 22.0/ 12);
  110.  MAP["G#3"] =  base * powl(two, 23.0/ 12);
  111.  MAP["A3"] =  base * powl(two, 24.0/ 12);;
  112.  MAP["A#3"] =  base * powl(two, 25.0/ 12);
  113.  MAP["B3"] =  base * powl(two, 26.0/ 12);
  114.  MAP["B#3"] =  base * powl(two, 27.0/ 12);
  115.  
  116.  MAP["C4"] =  base * powl(two, 27.0/ 12);
  117.  MAP["C#4"] =  base * powl(two, 28.0/ 12);
  118.  MAP["D4"] =  base * powl(two, 29.0/ 12);
  119.  MAP["D#4"] =  base * powl(two, 30.0/ 12);
  120.  MAP["E4"] =  base * powl(two, 31.0/ 12);
  121.  MAP["E#4"] =  base * powl(two, 32.0/ 12);
  122.  MAP["F4"] =  base * powl(two, 32.0/ 12);
  123.  MAP["F#4"] =  base * powl(two, 33.0/ 12);
  124.  MAP["G4"] =  base * powl(two, 34.0/ 12);
  125.  MAP["G#4"] =  base * powl(two, 35.0/ 12);
  126.  MAP["A4"] =  base * powl(two, 36.0/ 12);;
  127.  MAP["A#4"] =  base * powl(two, 37.0/ 12);
  128.  MAP["B4"] =  base * powl(two, 38.0/ 12);
  129.  MAP["B#4"] =  base * powl(two, 39.0/ 12);
  130.  
  131.  MAP["C5"] =  base * powl(two, 39.0/ 12);
  132.  MAP["C#5"] =  base * powl(two, 40.0/ 12);
  133.  MAP["D5"] =  base * powl(two, 41.0/ 12);
  134.  MAP["D#5"] =  base * powl(two, 42.0/ 12);
  135.  MAP["E5"] =  base * powl(two, 43.0/ 12);
  136.  MAP["E#5"] =  base * powl(two, 44.0/ 12);
  137.  MAP["F5"] =  base * powl(two, 44.0/ 12);
  138.  MAP["F#5"] =  base * powl(two, 45.0/ 12);
  139.  MAP["G5"] =  base * powl(two, 46.0/ 12);
  140.  MAP["G#5"] =  base * powl(two, 47.0/ 12);
  141.  MAP["A5"] =  base * powl(two, 48.0/ 12);;
  142.  MAP["A#5"] =  base * powl(two, 49.0/ 12);
  143.  MAP["B5"] =  base * powl(two, 50.0/ 12);
  144. }
  145.  
  146. int main() {
  147.  freopen("input.txt","r",stdin);
  148.  freopen("output.txt","w",stdout);
  149.  scanf("%d %d\n",&n, &L0);
  150.  for(int i = 0; i < n; ++i)
  151.   scanf("%d",&a[i]);
  152.  scanf("\n");
  153.  int nS = (1 << n);
  154.  for(int i = 0; i < nS; ++i) {
  155.   aS[i] = 0;
  156.   for(int j = 0; j < n; ++j)
  157.    if((i & (1 << j)) > 0) aS[i] += a[j];
  158.   fS[i] = Lambda / ((long double)L0 + aS[i]);
  159.  }
  160.  makeMap();
  161.  scanf("%d\n",&m);
  162.  for(int i = 0; i < m; ++i) {
  163.   string note;
  164.   getline(cin, note);
  165.   long double f0 = MAP[note];
  166.   long double minD = abs(f0 - fS[0]);
  167.   int index = 0;
  168.   for(int j = 0; j < nS; ++j)
  169.    if(abs(f0 - fS[j]) < minD) {
  170.     index = j;
  171.     minD = abs(f0 - fS[j]);
  172.    }
  173.   for(int j = 0; j < n; ++j)
  174.    if((index & (1 << j)) > 0) printf("o"); else printf(".");
  175.   printf(" ");
  176.   int number = (int)ceil((long double)(2.0) * (long double)L0 / (long double)aS[index]);
  177.   printf("%d ",number);
  178.   long double C = 12 * abs(logl(f0 / (long double)index) / logl(2.0));
  179.   printf("%.10Lf",C);
  180.   printf("\n");
  181.  }
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement