【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\) 的地图,地图上的每一个位置可以是空地,炮塔或是敌人.你需要操纵炮塔消灭敌人. 对于每个炮塔都有 ...
随机推荐
- Activiti Workflow HelloWorld 示例与测试环境搭建
作者:Rock 出处:http://www.ecmkit.com/zh-hans/2012/03/21/activiti-workflow-hell Activiti Workflow HelloWo ...
- php字符处理
1.strstr 截取某个字符后的字符: echo strstr("123456789","5");//输出:6789
- [luogu4133 BJOI2012] 最多的方案 (计数dp)
题目描述 第二关和很出名的斐波那契数列有关,地球上的OIer都知道:F1=1, F2=2, Fi = Fi-1 + Fi-2,每一项都可以称为斐波那契数.现在给一个正整数N,它可以写成一些斐波那契数的 ...
- QT_圆_直线_三角t
MyImgTest.h: #ifndef MYIMGTEST_H#define MYIMGTEST_H #include <QWidget> class MyImgTest : publi ...
- HDU Train Problem I (STL_栈)
Problem Description As the new term comes, the Ignatius Train Station is very busy nowadays. A lot o ...
- server.htaccess 具体解释以及 .htaccess 參数说明
.htaccess文件(或者"分布式配置文件")提供了针对文件夹改变配置的方法. 即.在一个特定的文档文件夹中放置一个包括一个或多个指令的文件, 以作用于此文件夹及其所有子文件夹. ...
- 多线程003 - 再谈CyclicBarrier
java.util.concurrent.CyclicBarrier也是JDK 1.5提供的一个同步辅助类(为什么用也呢?參见再谈CountDownLatch).它同意一组线程互相等待,直到到达某 ...
- UVA 1329 Corporative Network【并查集】
题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...
- fork同一时候创建多个子进程的方法
Fork同一时候创建多个子进程方法 第一种方法:验证通过 特点:同一时候创建多个子进程.每一个子进程能够运行不同的任务,程序 可读性较好,便于分析,易扩展为多个子进程 int main(void) { ...
- 任务调度器quartz的使用
1.quartz的获取. 可參照:Quartz任务调度模型实例 2.开发思路: 要使用定时器quartz.先弄清楚三个概念:调度器.任务.触发器.开发也是依照这三个方面来开发, 1>写一个Job ...