【hackerrank week of code 26】Hard Homework
【题目链接】:https://www.hackerrank.com/contests/w26/challenges/hard-homework/problem
【题意】
给你一个式子:sin(x)+sin(y)+sin(z)
这里x,y,z都为正整数;
让你求这个式子的最大值;
【题解】
由和差化积公式;
sin(x)+sin(y)=2∗sin(x+y2)∗cos(x−y2)
这里枚举x+y从2到n-1
x-y不好处理;
但如果我们分步来做;
对于x+y为偶数的情况;
我们每次从x+y推到x+y+2
会发现x-y的值每次会增加两个即|x+y-2|和-|x+y-2|
比如
①
x+y=2
x=1,y=1
则x-y
{0}
②
x+y=4
x=2,y=2 && x=1,y=3
{0}{-2}{2}
③
x+y=6
x=3,y=3 && x=4,y=2 && x= 5,y=1
{0}{2}{4}{-4};
且因为cos(-x)=cos(x)
所以每次x-y只用计算一个x+y-2即可;
然后把cos((x-y)/2)的最大值和最小值都带进去算一下就好了;
【Number Of WA】
WA > 4
【反思】
得到公式了,但对x-y这一点没有处理好;
没能得到x-y随x+y的变化规律.
还是偷懒了吧,没有多试几个x+y变化一下.
好像有试,但是只是试了+1的情况,觉得麻烦了,没往分类那里想。
【完整代码】
#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x)
#define Open() freopen("F:\\rush.txt","r",stdin)
#define Close() ios::sync_with_stdio(0)
typedef pair<int,int> pii;
typedef pair<LL,LL> pll;
const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 110;
int n;
double mi = 1e8,ma = -1e8,ans = -4;
int main(){
//Open();
Close();
cin >> n;
for (int i = 2;i <= n-1;i+=2){
double xsy = i-2;
mi = min(mi,cos(xsy/2.0));
ma = max(ma,cos(xsy/2.0));
ans = max(ans,2*sin(i/2.0)*mi+sin(n-i));
ans = max(ans,2*sin(i/2.0)*ma+sin(n-i));
}
mi = 1e8,ma = -1e8;
for (int i = 3;i <= n-1;i+=2){
double xsy = i-2;
mi = min(mi,cos(xsy/2.0));
ma = max(ma,cos(xsy/2.0));
ans = max(ans,2*sin(i/2.0)*mi+sin(n-i));
ans = max(ans,2*sin(i/2.0)*ma+sin(n-i));
}
cout << fixed << setprecision(9) << ans << endl;
return 0;
}
【hackerrank week of code 26】Hard Homework的更多相关文章
- 【HackerRank Week of Code 31】Colliding Circles
https://www.hackerrank.com/contests/w31/challenges/colliding-circles/problem 设E(n)为序列长度为n时的期望值. \[ \ ...
- 【枚举约数】HackerRank - Week of Code 26 - Satisfactory Pairs
题意:给你一个正整数n,问你存在多少个正整数对a,b(a<b),满足条件:存在正整数x,y,使得ax+by=n. 就预处理出n以内所有数的约数,然后暴力枚举a,暴力枚举x,然后枚举n-ax的所有 ...
- HackerRank Week of Code 26
好像这次week of code不是很难= = A int main(){ int n; int m; cin >> n >> m; cout<<(n+)/*)/) ...
- 6392. 【NOIP2019模拟2019.10.26】僵尸
题目描述 题解 吼题但题解怎么这么迷 考虑一种和题解不同的做法(理解) 先把僵尸离散化,h相同的钦(ying)点一个大小 (可以发现这样每种情况只会被算正好一次) 计算完全被占领的方案,然后1-方案/ ...
- 6389. 【NOIP2019模拟2019.10.26】小w学图论
题目描述 题解 之前做过一次 假设图建好了,设g[i]表示i->j(i<j)的个数 那么ans=∏(n-g[i]),因为连出去的必定会构成一个完全图,颜色互不相同 从n~1染色,点i的方案 ...
- 【EF Code First】 一对一、一对多的多重关系配置
这里使用相册Album和图片Picture的关系做示例 1,Album与Picture最基本的关系是1-n(一个相册可以有多张图片) 这时Album.Picture实体类可以这么定义 /// < ...
- 【EF Code First】 一对多、多对多的多重关系配置
这里使用用户表(User)和项目(Project)表做示例 有这样一个需求: 用户与项目的关系是:一个用户可以发多个项目,可以参加多个项目,而项目可以有多个参与成员和一个发布者 [其中含1-n和n-n ...
- 【26】Remove Duplicates from Sorted Array
[26]Remove Duplicates from Sorted Array Given a sorted array, remove the duplicates in place such th ...
- JZOJ 5602.【NOI2018模拟3.26】Cti
JZOJ 5602.[NOI2018模拟3.26]Cti Description 有一个 \(n×m\) 的地图,地图上的每一个位置可以是空地,炮塔或是敌人.你需要操纵炮塔消灭敌人. 对于每个炮塔都有 ...
随机推荐
- u-boot for tiny210 ver1.0(by liukun321咕唧咕唧)
新版本下载: 下面的链接提供了较新版本的源码 ver4.0源码下载:u-boot for tiny210 ver4.0 ver3.1源码下载: u-boot for tiny210 ver3.1 v ...
- Python笔记(2)
Python 一些常用的运算符: 1.算术运算符:+(加).-(减).*(乘)./(除).//(取整).%(取余).**(乘方): 2.比较运算符:>(大于).<(小于).>=(大于 ...
- Django REST Framework 序列化和校验 知识点
DRF序列化 Django ORM对象 --> JSON格式的数据 序列化 JSON格式的数据 --> Django ORM数据 反序列化 需要两个工具: from rest_framew ...
- 常用js方法封装
常用js方法封装 var myJs = { /* * 格式化日期 * @param dt 日期对象 * @returns {string} 返回值是格式化的字符串日期 */ getDates: fun ...
- js 学习思维导图
- Ubuntu(Linux Mint):sudo apt-get upgrade升级失败
Ubuntu上进行sudo apt-get upgrade后出现异常,升级失败. 异常信息如下: E: dpkg was interrupted, you must manually run 'dpk ...
- 洛谷——P1886 滑动窗口|| POJ——T2823 Sliding Window
https://www.luogu.org/problem/show?pid=1886#sub || http://poj.org/problem?id=2823 题目描述 现在有一堆数字共N个数字( ...
- vargrind 安卓apk
上层为安卓, 下层为调用c/c++ 库 1.将vargind 按官网方法下载源代码编译 得Inst文件夹 2.通过win 下安卓sdk 中 platform-tools 中的adb push Ins ...
- hdu1525 Euclid's Game , 基础博弈
http://acm.hdu.edu.cn/showproblem.php?pid=1525 题意: 两人博弈,给出两个数a和b, 较大数减去较小数的随意倍数.结果不能小于0,将两个数随意一个数减到0 ...
- [jzoj NOIP2018模拟11.02]
嗯T1忘记取模了,100到20 嗯T2忘记了那啥定理,暴力也写炸了,这题我认 嗯T3线段树合并分裂没有写炸,考场上就知道妥妥的70分.但是,分数出的时候听到有人说暴力也是70分,我???脸黑,枉我敲了 ...