ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[ural 2121]. Intersection of Parabolas

2019-11-05 19:50:47  阅读:309  来源: 互联网

标签:2121 return sqr newton db sqrt Parabolas ural x0


题意

给出一个整数\(a\),给出两个抛物线\(y = (x - a) ^ 2\)和\(x = (y - a) ^ 2\)。
求两个曲线围成的面积。
\(1 \leq a \leq {10} ^ {18}\)。

题解

开始感觉就是一道积分题。
显然该函数图像可以分三段来积分。
然后写了个shit长的牛迭+积分。
然后发现它不仅爆精了,还T了。
诶,等等……这个\(a\)为什么是整数啊?
若干秒后——
tm这竟然是找规律题……
输出\(a\),输出\(\frac{12a - 1}{3}\)……
但是这对于实数不应该也成立吗?
原因很简单,\(a\)是整数时答案的形式都是\(x.6666666667\),直接算反而要爆精……

#include <bits/stdc++.h>
using namespace std;
long long a, b;
int main () {
    cin >> a;
    b = a * 4 - 1;
    cout << b << ".6666666667" << endl;
    return 0;
}

另附长长的暴力……

#include <bits/stdc++.h>
using namespace std;
typedef double db;
// y1 = (x - a) ^ 2
// y2 = \sqrt x - a
// y3 = a - \sqrt x
const db eps = 1e-14, inf = 2e18;
db a, x1, x2, x3, x4, ans;
db sqr (db x) {
    return x * x;
}
db cub (db x) {
    return x * x * x;
}
db f1 (db x) {
    return sqr(x - a) - sqrt(x) - a;
}
db d_f1 (db x) {
    return (x - a) * 2 - sqrt(x) / 2;
}
db f2 (db x) {
    return sqr(x - a) + sqrt(x) - a;
}
db d_f2 (db x) {
    return (x - a) * 2 + sqrt(x) / 2;
}
db f3 (db x) {
    return sqr(x - a) + sqrt(x) - a;
}
db d_f3 (db x) {
    return (x - a) * 2 + sqrt(x) / 2;
}
db f4 (db x) {
    return sqr(x - a) - sqrt(x) - a;
}
db d_f4 (db x) {
    return (x - a) * 2 - sqrt(x) / 2;
}
db newton_f1 (db x) {
    db x0 = x + 1;
    for ( ; fabs(x - x0) > eps; ) {
        x0 = x, x = x0 - f1(x0) / d_f1(x0);
    }
    return x;
}
db newton_f2 (db x) {
    db x0 = x + 1;
    for ( ; fabs(x - x0) > eps; ) {
        x0 = x, x = x0 - f2(x0) / d_f2(x0);
    }
    return x;
}
db newton_f3 (db x) {
    db x0 = x + 1;
    for ( ; fabs(x - x0) > eps; ) {
        x0 = x, x = x0 - f3(x0) / d_f3(x0);
    }
    return x;
}
db newton_f4 (db x) {
    db x0 = x + 1;
    for ( ; fabs(x - x0) > eps; ) {
        x0 = x, x = x0 - f4(x0) / d_f4(x0);
    }
    return x;
}
db i_f12 (db x) {
    return -cub(x) / 3 + a * sqr(x) + 2.0 / 3 * pow(x, 1.5) + a * x - sqr(a) * x;
}
db i_f12 (db l, db r) {
    return i_f12(r) - i_f12(l);
}
db i_f23 (db x) {
    return 4.0 / 3 * pow(x, 1.5);
}
db i_f23 (db l, db r) {
    return i_f23(r) - i_f23(l);
}
db i_f34 (db x) {
    return -cub(x) / 3 + a * sqr(x) + 2.0 / 3 * pow(x, 1.5) + a * x - sqr(a) * x;
}
db i_f34 (db l, db r) {
    return i_f34(r) - i_f34(l);
}
int main () {
    cin >> a;
    x1 = newton_f1(0);
    x2 = newton_f2(0);
    x3 = newton_f3(a * 2);
    x4 = newton_f4(a * 2);
    ans = i_f12(x1, x2) + i_f23(x2, x3) + i_f34(x3, x4);
    cout << fixed << setprecision(10) << ans << endl;
    return 0;
}

标签:2121,return,sqr,newton,db,sqrt,Parabolas,ural,x0
来源: https://www.cnblogs.com/psimonw/p/11801093.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有