玲珑学院 1137 Sin your life 【数学】

题目大意:

对于给定的n,求当x、y、z均为整数时$sin(x)+sin(y)+sin(z)$的最大值。结果保留到小数点后9位。

解题思路:

如果枚举x、y的话是太暴力了。我们不妨把要求的式子化简一下,利用和差化积公式进行化简:

$sin x + sin y = 2 \times sin(\frac{x+y}{2}) \times cos(\frac{x-y}{2})$

$sin x + sin y + sin z = 2 \times sin(\frac{x+y}{2}) \times cos(\frac{x-y}{2}) + sin(n - x - y)$

化简后从2-n-1枚举x+y的值。

因为x+y的值固定,所以当它的值为偶数时,cos那部分的值最大为1(当x==y时);

而当它的值为奇数时,x-y可以等于1,3,5…n-2,这时加个再判断来取cos那部分的最大值。

Mycode:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MAX = 10005;
const int MOD = 1e9+7;
const int INF = 0x3f3f3f3f;

int n;
double ans = -INF, tem, mac = -2;
int main()
{
scanf("%d",&n);
for(int i = 2; i < n; ++i)
{
if(i % 2 == 0)
tem = 2.0*sin(i/2.0) + sin(n-i);
else
{
mac = max(mac, cos((i-2.0)/2.0));
tem = 2.0*sin(i/2.0)*mac + sin(n-i);
}
if(ans < tem)
ans = tem;
}
printf("%.9f\n",ans);
return 0;
}
Donate comment here
0%