首页 > 其他分享 >CF1846D Rudolph and Christmas Tree 题解

CF1846D Rudolph and Christmas Tree 题解

时间:2023-07-13 16:47:10浏览次数:41  
标签:int 题解 dd Rudolph CF1846D hh ans double 三角形

Decription

一颗圣诞树由 \(n\) 个底边为 \(d\),高度为 \(h\) 的等腰三角形组成,每个三角形以 \(y\) 轴为对称轴,底边均平行于 \(x\) 轴,三角形有可能重叠。

给出 \(n,d,h\) 以及每个三角形底边与 \(x\) 轴的距离,求该圣诞树的面积。

Solution

如图,这是一棵圣诞树,其由两部分组成,完整的一个三角形 \(ABC\) 和 等腰梯形 \(DEGF\)(底边之差大于 \(h\) 时,为完整的一个三角形)。

设 \(dd=FG,hh=BD\)。

\(\therefore S_{\texttt{tree}}=S_{\vartriangle \texttt{ABC}}+S_{\texttt{梯DEGF}}=d\times h\div2+(d+dd)\times hh\)

\(\because S_{\vartriangle HFG}\sim S_{\vartriangle HDE}\)

\(\therefore \dfrac{dd}{d}=\dfrac{h-hh}{h}\)

\(\therefore dd=(h-hh)\div h\times d\)

因为 \(hh\) 为两三角形上下底边之差,所以所有数据都已知,可以得出答案。

Code

#include<bits/stdc++.h>
using namespace std;
#define doubl long double
int t;
double a[200200]; //要记得开 double
void solve(){
	int n;
	double d,h,ans=0;
	cin>>n>>d>>h;
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=2;i<=n;i++){
		if(a[i]-a[i-1]>h) ans+=d*h/2.0; //不重叠时是一个三角形
		else {
			double dd=(h-(a[i]-a[i-1]))*d/h;
			ans+=(dd+d)*(a[i]-a[i-1])/2.0;  //得出梯形面积
		}
	}
	ans+=d*h/2.0;  //最后一个图形总为完整的三角形
	printf("%.6lf\n",ans); //要输出6位小数
}
int main(){
	cin>>t;
	while(t--){
		solve();
	}
	return 0;
}

标签:int,题解,dd,Rudolph,CF1846D,hh,ans,double,三角形
From: https://www.cnblogs.com/larryyu/p/17551303.html

相关文章

  • NOI2021 题解
    [NOI2021]轻重边转化一下题意:每次给一条链染色,查一条链从\(x\)到\(y\)有几条边两端颜色相同。那这个随便树剖线段树就好了。也可以LCT,码量可能要小点。#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<vector>usingnamespace......
  • 题解 最大加权矩阵
    题目链接虽然是一道橙题,但还是蕴含了重要算法思想——降维思想。如果是一维形式,即最大子段和,我们采取先求前缀和,并固定右端点,减去左边最小的办法求。对于这题,若固定了上下边界,则可以利用列的前缀和将其“压缩”为一维形式,再采取“最大子段和”的方式求解。如下面一个二维矩阵:......
  • 题解 醋溜便当
    题目链接题目让我们找出每个点是否存在长度\(\in[x,k\timesx]\)的回路,若找到一长度为\(a(0<a\lex)\)的回路,那么必然存在\(pa\in[x,k\timesx](p\in\Z)\),若找到长度\(\in[x,k\timesx]\)的回路,直接符合条件。所以问题转化为求是否存在\(\in[1,k\timesx]\)的回路,只需......
  • 【题解】CF gym 104337 G. Guess the Polynomial
    statement:https://codeforces.com/gym/104337/problem/G。即求\(f(x)=\sum\limits_{i=0}^{p-2}a_ix^i\),其中只有不超过\(n\)个\(a_i\)非\(0\)。记:\[\begin{aligned}A_{n}^{k}&=\sum_{i\equivk\pmod{n}}a_i=\frac{1}{n}\sum_{i=0}^{n-1}f(\omega_{n}^{......
  • CF1450C2 题解
    题目传送门再不写题解社贡要掉到\(0\)了。题目分析显然如果\(3\)个格子构成了满足获胜条件的情况,这\(3\)个格子模\(3\)的余数各不相同。那么我们将格子按模\(3\)的余数分为\(3\)类,只要保证相邻\(3\)个格子中有\(2\)个不同就行了,不需要动第\(3\)个。我们令......
  • Facetook Priority Wall 题解
    题目传送门一道模拟题。用一个map存储每个人的优先级因子,然后存进vector里进行排序。难点在于分辨\(X\)和\(Y\)与当前是什么操作。不过需要注意,只要出现了名字就需要输出,且我们认为与你没关系的人不加分。Code#include<bits/stdc++.h>#definelllonglong#define......
  • centos7ping不通主机却能够上网时的问题解决方案
       ......
  • Codeforeces #1844 A~D题解
    Codeforeces#1844A~D题解ASubtractionGame博弈论A+Bproblem由于只有两种数字可选,若石子数量为a+b,先手选完之后必然为a或b,因此后手可以直接选完BPermutations&Primes构造构造方法:35791108642,这样把1放中间可以让最多的区间拿到1,接下来避免同时拿......
  • 「Network」题解
    「CEOI2012」NetworkSolutiontoQuestionⅠ首先缩点(当然也可以不缩?),然后跑一遍DFS即可。//w为联通分量里的节点个数inlinevoiddfs(constint&u){ ans1[u]=w[u]; for(intv:G_scc[u]) dfs(v),ans1[u]+=ans1[v];}SolutiontoQuestionⅡ观察缩完点后......
  • 正方形鱼池题解
    首先这道题\(T\)的范围很小,而\(N\)的范围却很大,所以我们只能枚举树那么我们如何枚举呢,树有上下左右之分,看起来十分难枚举,现在让我们仔细分析一下:水池的边长就等于\(min(上下界的距离,左右界的距离)\)这时我们就可以开始枚举了,我枚举的是左右界那么我们此时就可以发现上下界的两......