玲珑学院 1137 Sin your life 【数学】
来源:互联网 发布:at指令c语言编程 编辑:程序博客网 时间:2024/06/05 20:46
1137 - Sin your life
Time Limit:1s Memory Limit:128MByte
Submissions:613Solved:112
DESCRIPTION
给一个正整数n,求下列表达式的最大值:
(sin(x)+sin(y)+sin(z))[x+y+z=n][x≥1][y≥1][z≥1]为了降低难度,这里的x,y,z皆为整数
INPUT
输入只有一行,包含一个正整数n(3≤n≤3∗106)
OUTPUT
输出一行表示答案,请恰好保留9位小数.(你的答案必须和标准答案完全一样才算通过)
SAMPLE INPUT
3
SAMPLE OUTPUT
2.524412954
题目链接:
玲珑学院 1137 Sin your life
题目大意:
对于给定的n,求当x、y、z均为整数时sin(x)+sin(y)+sin(z)的最大值。结果保留到小数点后9位。
解题思路:
如果枚举x、y的话是太暴力了。我们不妨把要求的式子化简一下,利用和差化积公式进行化简
sin(x)+sin(y)=2⋅sin(x+y2)⋅cos(x−y2)
sin(x)+sin(y)+sin(z)=2⋅sin(x+y2)⋅cos(x−y2)+sin(n−x−y)
这时加个再判断来取cos那部分的最大值。
Mycode:
#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;}
和差化积公式:
积化和差公式:
阅读全文
0 0
- 玲珑学院 1137 Sin your life 【数学】
- Sin your life 数学
- “玲珑杯”线上赛 Round #17 Sin your life(数学知识)
- “玲珑杯”线上赛Round#17河南专场 A. Sin your life
- 玲珑学院 1058 - Coco
- 玲珑学院problem1068
- 玲珑学院1072 【DFS】
- 玲珑学院 1097
- 玲珑学院-1107【贪心】
- 玲珑学院OJ 1126
- 玲珑学院OJ 1125
- 玲珑学院OJ 1131
- 玲珑学院1131
- 玲珑学院1129
- 玲珑学院OJ 1121
- 玲珑学院1129
- 玲珑学院OJ 1130
- 玲珑学院 1132
- 大数相加(正整数)
- 文章标题
- hpuoj 【1288】数组次值 【水题】&&【sort】
- 如何编译生成动态文件.so
- Java 异常
- 玲珑学院 1137 Sin your life 【数学】
- jsp标签
- day02
- UVA 12196 Disgruntled Judge 拓展欧几里德算法
- 笔记 shell基础应用,texturePacker 命令批量打包打包
- x86内核启动分析一 看看打印吧
- 20170727Link
- WAY # Chapter 1
- 关于Mybatis的$和#的细节,源码解析