/* Sat Oct 25 00:00:25 JST 2003 */ /* Sat Oct 25 00:56:01 JST 2003 */ #include #include int n, m; double areatable[42][42]; double max; double rec(double area, int cur, int len, int first) { int i; double max = 0.0, tmp; if (len >= m) { return area + areatable[cur][first]; } for (i = cur+1; i < n; i++) { if (max < (tmp = rec(area + areatable[cur][i], i, len+1, first))) max = tmp; } return max; } double maxarea(void) { int i; double max = 0.0, tmp; for (i = 0; i < n; i++) { if (max < (tmp = rec(0, i, 1, i))) max = tmp; } return max; } int main() { int i, j; double p[42]; while (1) { scanf("%d %d", &n, &m); if (n == 0 && m == 0) break; for (i = 0; i < n; i++) { scanf("%lf", &p[i]); } for (i = 0; i < n; i++) { for (j = i; j < n; j++) { if (j == i) areatable[i][j] = 0; else { areatable[i][j] = sin((p[j] - p[i]) * M_PI * 2) / 2; areatable[j][i] = -areatable[i][j]; } } } printf("%lf\n", maxarea()); } return 0; }