func_code_string: #include <bits/stdc++.h>   using namespace std;   pair<int, int> point[100];   double ang[100];   double dp[10000000];   int i, j, k, N, M, K, l, r;   void clear() {}   void init() {     scanf( %d%d%d , &N, &l, &r);     for (i = 0; i <= N - 1; i++) {       int first;       scanf( %d%d%d , &point[i].first, &point[i].second, &first);       ang[i] = (first * 1.0) * 3.1415926535 / 180.0;     }   }   double func(int a, int h, double ang, double st) {     double alpha = atan(fabs(a - st) / h);     if (a > st) {       double beta = alpha - ang;       if (beta > 0) {         double q = h * tan(beta);         return min(1.0 * r, a - q);       } else {         beta *= -1;         return min(1.0 * r, a + h * tan(beta));       }     } else {       if (alpha + ang > 3.1415926535 / 2) {         return 1.0 * r;       } else {         double beta = alpha + ang;         return min(1.0 * r, h * tan(beta) + a);       }     }   }   void calc() {     for (i = 0; i <= (1 << N) - 1; i++) {       dp[i] = l * 1.0;     }     for (i = 0; i <= (1 << N) - 1; i++) {       for (j = 0; j <= N - 1; j++) {         if (!(i & (1 << j)))           dp[i | (1 << j)] =               max(dp[i | (1 << j)],                   func(point[j].first, point[j].second, ang[j], dp[i]));       }     }     printf( %.8f n , dp[(1 << N) - 1] - l);   }   int main() {     clear();     init();     calc();   }   