CodeForces 342C Cupboard and Balloons (几何问题)

题意:给定一个 r 和 h,r 是上面那个半球的半径,h 是下面那个圆柱的高度,然后有一些半径为 r/2的气球,问你最多能放几个。

析:根据题意,很容易知道,先从下面往上放,两个两个的放,放到不能放的时候,再计算在上面是不是还能再放一个。这样是最多的,关键是计算上面那能不能放上,用到几何中的两圆的位置关系,

可以看出从下往上放气球的时候,球心最高只能到半球和圆柱的交线处,所以我们就可以很轻松计算两个两个的放,最多可以放几组,也就是h + r 整除以 r,要整数,然后再计算以后那一个圆,

那个圆最高就是恰好的那个半球相切,我们可以以半球心为原点,建立坐标系,那么圆就是(0, r/2),然后再计算最上面那个圆是不是和它相离或相切,如果是就可以放上,如果不是,就放不上。

代码如下:

#include <bits/stdc++.h>

using namespace std;
const int maxn = 33333 + 5;
typedef long long LL;
const double eps = 1e-9;
int a[10];

int main(){
    LL r, h;
    while(cin >> r >> h){
        double rr = r * 1.0/ 2.0;
        double x = rr + (double)h;
        LL ans = (LL)(x / r);
        double y = sqrt(3)/2.0 * r + h - ans * r;
        double yy = sqrt(3)/2.0 * r - y;
        yy -= rr;
        double d = rr * rr + (yy - rr) * (yy - rr);
        if(d - 4*rr*rr > eps)  cout << ans * 2 + 1 << endl;
        else cout << ans * 2 << endl;
    }
    return 0;
}
时间: 2024-08-03 05:08:47

CodeForces 342C Cupboard and Balloons (几何问题)的相关文章

codeforces 342C Cupboard and Balloons(公式题)

转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud C. Cupboard and Balloons A girl named Xenia has a cupboard that looks like an arc from ahead. The arc is made of a semicircle with radius r (the cupboard's top) and two walls of height h (the

Codeforces 677E - Vanya and Balloons

题意:类似炸弹人游戏,但是十字的炸弹弹道都是等长的(就是4个方向的长度一样)(可以炸十.×),然后结果是所能炸到的每个格子的乘积的最大值. 分析:一眼看下去就是DP了,但有与涉及8个方向,所以就要分别DP8个方向.每个方向就是一个一维的DP.        还有要大小的比较就要利用到log了,因为要比较[2^k1 和 3^k2(k1>k2)]的大小,直接算是不现实的,所以利用log转化成--->[k1*log(2) 和 k2*log(3)]的大小比较. 吐槽时间:这代码真难打吖,调试n久...

codeforces 848B - Rooter&#39;s Song(构造+几何)

原题链接:http://codeforces.com/problemset/problem/848/B 题意:好多个人分别从x,y轴不同位置不同时间往垂直坐标轴方向移动,一旦相遇他们转向,问所有人的到达边缘的位置. 思路:即使相遇后没有改变方向,终点位置还是不变的. 1.首先可以根据开始移动的时间将每个人的初始位置往后移动ti单位,这样就可以看作所有人都同时开始移动了. 2.接下来,假设两个人i,j在t时刻(x, y)处相撞,那么可以推知两个人的初始位置分别为(x-t, y),(x, y-t),

Codeforces Round #403 div2 C. Andryusha and Colored Balloons

题目链接:Codeforces Round #403 div2 C. Andryusha and Colored Balloons 题意: 给你一棵n个节点的树,然后让你染色,规定相连的三个 节点不能同色,问需要的最少颜色,并输出其中一种方案. 题解: 因为只有相邻3个节点不同色. 所以直接DFS,每个节点都从1开始. 然后ans[v]!=ans[u]!=ans[fa]就行. 1 #include<bits/stdc++.h> 2 #define F(i,a,b) for(int i=a;i&

Codeforces Round #346 (Div. 2) (659A,659B,659C,659D(几何叉乘),659E(并查集))

Round House 题目链接: http://codeforces.com/problemset/problem/659/A 解题思路: The answer for the problem is calculated with a formula ((a?-?1?+?b)  n + n)  n + 1. Such solution has complexity O(1). There is also a solution with iterations, modelling every o

CodeForces - 598C(高精度几何 排序然后枚举)

传送门: http://codeforces.com/problemset/problem/598/C Nearest vectors time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output You are given the set of vectors on the plane, each of them starting at

CodeForces 703C Chris and Road (简单几何)

题意:有一个n边形的汽车向以速度v向x轴负方向移动,给出零时时其n个点的坐标.并且有一个人在(0,0)点,可以以最大速度u通过w宽的马路,到达(0,w)点.现在要求人不能碰到汽车,人可以自己调节速度.问人到达马路对面的最小时间是多少? 析:这个题是一个简单的分类讨论,很明显只有两种情况,第一种,直接到达w,不会被车撞到,答案就是w/u, 第二种是切着车过去,或者是等车过去再过去,只要枚举车的每个顶点,找到最后通过y轴的点就好,或者根本不会与车相切. 代码如下: #pragma comment(l

CodeForces 507B Amr and Pins(几何 水)

#include<cstdio> #include<cmath> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int main() { double r,x,y,x1,y1; while(scanf("%lf%lf%lf%lf%lf",&r,&x,&y,&x1,&y1)!=EO

codeforces 394E Lightbulb for Minister 简单几何

题目链接:点我点我 题意:给定n个点.下面n行给出这n个点坐标. 给定m个点,下面m行给出这m个点坐标. 这m个点是一个凸包,顺时针给出的. 问:在凸包上任意找一个点(x, y) 使得这个点距离n个点的距离平方和最小. 问这个最小的距离平方和是多少. 思路: 首先化简一下公式,把变量(x,y)提出来会发现是一个简单的函数,且开口向上,所以有唯一解,解出这个(x,y) 记为 (good_x, good_y) 但这个点可能不是坐落在凸包内,若坐落在凸包外,则最优解一定是在凸包的边上,所以枚举每条边求