首页 > 其他分享 >题解 accoders::NOI 5510【飞翔的胖鸟(fly)】

题解 accoders::NOI 5510【飞翔的胖鸟(fly)】

时间:2023-10-05 09:46:02浏览次数:42  
标签:fly cos %. frac NOI 题解 d% long double

题解 accoders::NOI 5510【飞翔的胖鸟(fly)】

problem

求 \(f(x)=\frac{ah}{\sin(x)}+bx\) 在 \((0,\frac\pi 2]\) 上的最小值。

solution

\(\sin'(x)=cos(x); \cos'(x)=-\sin(x)\)。

\((f(x)\cdot g(x))'=f'(x)g(x)+f(x)g'(x)\)。

\(\left(\dfrac{f(x)}{g(x)}\right)'=\dfrac{f'(x)g(x)-f(x)g'(x)}{g^2(x)}.\)

\(f'(x)=ah\frac{\cos(x)}{\sin^2(x)}+b=ah\frac{\cos(x)}{1-\cos^2(x)}+b\)。

因为在 \((0,\frac\pi 2]\) 上导数单调递增,故当导数 \(f'(x)=0\) 时原函数取到最小值,即以 \(\cos(x)\) 为未知数解一元二次方程

\[ah\frac{\cos(x)}{1-\cos^2(x)}+b=0 \implies ah\cos(x)+b(1-\cos^2(x))=0 \]

直接牛顿迭代 \(x_n=x_{n-1}-\frac{f(x_{n-1})}{f'(x_{n-1})}\) 可以获得 TLE 的好成绩,因为询问数太多。

code

// ubsan: undefined
// accoders
#include <cmath>
#include <cstdio>
#include <vector>
#include <cstring>
#include <cassert>
#include <algorithm>
using namespace std;
#ifdef LOCAL
#define debug(...) fprintf(stderr, ##__VA_ARGS__)
#else
#define debug(...) void(0)
#endif
typedef long long LL;
const double pi = acos(-1);
double decsolve(double h, double a, double b) {
    if (!b)
        return a * h;
    double delta = a * a * h * h + 4 * b * b;
    double y = (-a * h + sqrt(delta)) / 2 / b;
    double x = acos(y);
    debug("decsolve(%.0lf, %.0lf, %.0lf) = f(%.4lf)\n", h, a, b, x);
    return a * h / sin(x) + b * x;
}
int h, a, b, H, A, B, T, typ;
void Read() {
    long long x = 1ll * h * H, y = 1ll * a * A, z = 1ll * b * B;
    h = (H ^ (y + z)) % 1000 + 1;
    a = (A ^ (x + z)) % 1000 + 1;
    b = (B ^ (x + y)) % 100000 + 1;
}
int main() {
#ifndef nfio
    freopen("fly.in", "r", stdin);
    freopen("fly.out", "w", stdout);
#endif
    scanf("%d%d", &typ, &T);
    if (typ == 0) {
        while (T--) {
            scanf("%d%d%d", &h, &a, &b);
            printf("%.4lf\n", decsolve(h, a, b));
        }
    } else {
        scanf("%d%d%d%d%d%d", &h, &a, &b, &H, &A, &B);
        long long ans = 0, mod = 19260817, now = 1;
        while (T--) {
            Read();
            // debug("h = %d, a = %d, b = %d, ans = %.4lf\n", h, a, b, solve(h, a, b));
            now = now * 11514 % mod;
            ans = (ans + (long long)(decsolve(h, a, b) * 1e4) % mod * now) % mod;
        }
        printf("%lld\n", ans);
    }
    return 0;
}

标签:fly,cos,%.,frac,NOI,题解,d%,long,double
From: https://www.cnblogs.com/caijianhong/p/17743073.html

相关文章

  • 题解 accoders::NOI 5508【漂亮大厨(cook)】
    题解accoders::NOI5508【漂亮大厨(cook)】part1区间加\(x\),区间询问有多少个数字\(\leqy\)。\(n,m\leq10^5,x\leq200,y\leq10^7\)。考虑P5356[Ynoi2017]由乃打扑克的做法,分块,块内按照值排序。修改就整块打tag,散块暴力重构(可以归并排序重构);询问在整块上二分,散块暴力......
  • P9019 [USACO23JAN] Tractor Paths P 题解
    Description有\(n\)个区间,第\(i\)个区间为\([l_i,r_i]\)。保证\(l_1<l_2<\cdots<l_n\)且\(r_1<r_2<\cdots<r_n\)。其中一部分区间是特殊的,输入会给定。如果第\(i\)个区间和第\(j\)个区间相交,那么\(i,j\)之间有一条边。保证\(1,n\)联通。给定\(Q\)组询问,每次......
  • 题解 P9701【[GDCPC2023] Classic Problem】
    题如其名,确实挺经典的。我们称边权在输入中给定的边为特殊边,其它边为平凡边。称特殊边涉及到的点为特殊点,其它点为平凡点。显然,对于连续的若干平凡点\([l,r]\),他们内部的最优连边方式就是连成一条链,花费\(r-l\)的代价。我们先把这样的代价加到答案中,然后将极长连续平凡点缩成......
  • [SHOI2009] 会场预约 题解
    LG任意时刻每个点最多被一条线段覆盖暴力删每条线段是对的插入\([l,r]\)时需要删除的线段要么被\([l,r]\)包含,要么覆盖\(l\)或\(r\)性质非常强所以做法非常多一种比较神奇的:对于两条线段\([l_{1},r_{1}],[l_{2},r_{2}]\),定义<为\(r_{1}<l_{2}\),即线段\(1\)完......
  • 题解 accoders::NOI 5511【漂亮轰炸(bomb)】
    题解accoders::NOI5511【漂亮轰炸(bomb)】http://47.92.197.167:5283/contest/406/problem/4BZOJ3252是弱化版。problem一棵树,边带权。\(Q\)次询问,给定\(k\)和一个首都点,选择\(k\)条路径轰炸,其中必须由一轮要轰炸首都,但没有要求每条路径都经过首都。每条边只能被炸一次,......
  • 题解 P9695【[GDCPC2023] Traveling in Cells】
    显然,询问的答案即为\(x\)所在的极长的满足颜色均在\(\mathbb{A}\)内的连续段的权值和。如果我们能维护对颜色的单点修改,以及求出某个位置所在极长连续段的左右端点\(l,r\),只需要树状数组即可求出答案。一个朴素的想法是对每种颜色开一棵线段树,单点修改是平凡的,极长连续段左......
  • 题解 P9702【[GDCPC2023] Computational Geometry】
    这题一看就不是计算几何,考虑区间DP。设凸多边形的\(n\)个顶点依次为\(P_1,P_2,\cdots,P_n\)。设\(f_{i,j}\)在\(i<j\)时表示\(P_i,P_{i+1},\cdots,P_{j-1},P_j\)组成的多边形的直径的平方,在\(i>j\)时表示\(P_i,P_{i+1},\cdots,P_n,P_1,\cdots,P_{j-1},P_j\)组......
  • 题解 P9697【[GDCPC2023] Canvas】
    好题。后面的操作会覆盖前面的操作,这东西不好处理,我们不妨时光倒流,将问题转化为一个位置一旦被填了数,就再也不会变了。如果解决了这个问题,只需将操作序列倒过来,就得到了原问题的解。显然,所有\(x_i=y_i=2\)的操作会最先被执行,所有\(x_i=y_i=1\)的操作会最后被执行。只需要给......
  • 高橋君 题解
    AtCoder天下一プログラマーコンテスト2014本戦高橋君题意给定\(n,k\),求\[\sum\limits_{i=0}^{k}\dbinom{n}{i}\]多测,\(1\len,k,T\le10^5\)。题解可以考虑使用莫队求解,下文讲述如何移动指针。\(n\rightarrown+1\)根据杨辉三角递推式\(\dbinom{n}{m}=......
  • 题解 P2674 《瞿葩的数字游戏》T2-多边形数
    题目描述给你一个正整数数\(n\),问你它是不是多边形数\(K\),如果是,设\(K_1\)是最小的\(K\),\(K_2\)是次小的\(K\),输出\(K_1\)和\(K_2\)。具体思路我们主要来看上面这张表里有什么规律。性质1:\(1\)是任何一个多边形数。性质2:\(2\)不是任何一个多边形数。性......