题目大意:

思路:

首先我们需要求出整个凸多面体的重心

可以通过把多面体剖分为四面体 求出每个四面体的重心

四面体的重心为四个点的坐标和/4

对每个四面体的重心 加上它们体积的权 加权平均数即为整个的重心

(求每个四面体的体积可以用三个向量的混合积

因为给出了求凸面三角形的公式

因此一个凸面上凸N边形的公式为它的内角和-(N-2)*pi

这样这个面的答案为面积/整个圆的表面积即4pi

(求二面角可以用叉积 求出两个法向量然后运用课内知识求出二面角

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
#define inf 2139062143
#define ll long long
#define MAXN 200
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
const double pi=acos(-);
int n,m,alpha[MAXN][MAXN],num[MAXN];
struct Vector{double x,y,z;}p[MAXN];
Vector operator + (const Vector &a,const Vector &b) {return (Vector){a.x+b.x,a.y+b.y,a.z+b.z};}
Vector operator - (const Vector &a,const Vector &b) {return (Vector){a.x-b.x,a.y-b.y,a.z-b.z};}
Vector operator * (const Vector &a,const double &b) {return (Vector){a.x*b,a.y*b,a.z*b};}
Vector operator / (const Vector &a,const double &b) {return (Vector){a.x/b,a.y/b,a.z/b};}
Vector operator ^ (const Vector &a,const Vector &b) {return (Vector){a.y*b.z-a.z*b.y,a.z*b.x-a.x*b.z,a.x*b.y-a.y*b.x};}
double operator & (const Vector &a,const Vector &b) {return a.x*b.x+a.y*b.y+a.z*b.z;}
inline double len(Vector a) {return sqrt(a&a);}
inline double getV(Vector a,Vector b,Vector c) {return a&(b^c);}
inline double getA(Vector a,Vector b,Vector c)
{
Vector x=a^c,y=a^b;return acos(x&y/len(x)/len(y));
}
int main()
{
n=read(),m=read();Vector tmp,ctr;double x,vs=0.0,ans;
for(int i=;i<=n;i++)
scanf("%lf%lf%lf",&p[i].x,&p[i].y,&p[i].z);
for(int i=;i<=m;i++)
{
num[i]=read();
for(int j=;j<=num[i];j++) alpha[i][j]=read();
}
for(int i=;i<=m;i++)
for(int j=;j<num[i];j++)
{
tmp=p[alpha[i][]]+p[alpha[i][j]]+p[alpha[i][j+]];
x=getV(p[alpha[i][]],p[alpha[i][j]],p[alpha[i][j+]]);
vs+=x,ctr=ctr+tmp*x;
}
ctr=ctr/(vs*);
for(int i=;i<=n;i++) p[i]=p[i]-ctr;
for(int i=;i<=m;i++)
{
ans=;
for(int j=;j<=num[i];j++) ans+=getA(p[alpha[i][j]],p[alpha[i][j!=?j-:num[i]]],p[alpha[i][j!=num[i]?j+:]]);
printf("%.7lf\n",(ans-(num[i]-)*pi)/(pi*));
}
}

bzoj 4603 平凡的骰子的更多相关文章

  1. [Sdoi2016]平凡的骰子

    描述 这是一枚平凡的骰子.它是一个均质凸多面体,表面有n个端点,有f个面,每一面是一个凸多边形,且任意两面不共面.将这枚骰子抛向空中,骰子落地的时候不会发生二次弹跳(这是一种非常理想的情况).你希望知 ...

  2. [LOJ 2070] 「SDOI2016」平凡的骰子

    [LOJ 2070] 「SDOI2016」平凡的骰子 [题目链接] 链接 [题解] 原题求的是球面面积 可以理解为首先求多面体重心,然后算球面多边形的面积 求重心需要将多面体进行四面体剖分,从而计算出 ...

  3. 【LOJ】#2070. 「SDOI2016」平凡的骰子

    题解 用了一堆迷之复杂的结论结果迷之好写的计算几何???? 好吧,要写立体几何了 如果有名词不懂自己搜吧 首先我们求重心,我们可以求带权重心,也就是x坐标的话是所有分割的小四面体的x坐标 * 四面体体 ...

  4. 【Vijos 1998】【SDOI 2016】平凡的骰子

    https://vijos.org/p/1998 三维计算几何. 需要混合积求四面体体积: 四面体剖分后合并带权重心求总重心: 四面体重心的横纵坐标是四个顶点的横纵坐标的平均数: 三维差积求平面的法向 ...

  5. LOJ#2070. 「SDOI2016」平凡的骰子(计算几何)

    题面 传送门 做一道题学一堆东西不管什么时候都是美好的体验呢-- 前置芝士 混合积 对于三个三维向量\(a,b,c\),定义它们的混合积为\((a\times b)\cdot c\),其中$\time ...

  6. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  7. [LOJ 2134][UOJ 132][BZOJ 4200][NOI 2015]小园丁与老司机

    [LOJ 2134][UOJ 132][BZOJ 4200][NOI 2015]小园丁与老司机 题意 给定平面上的 \(n\) 个整点 \((x_i,y_i)\), 一共有两个问题. 第一个问题是从原 ...

  8. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

  9. BZOJ1298[SCOI2009]骰子的学问

    Description Input 第一行为两个整数n, m.第二行有n个整数,为a1,a2, -, an. Output 包含n行,每行m个1~n×m的正整数,各不相同,以空格分开.如果有多解,输出 ...

随机推荐

  1. Android渐变GradientDrawable叠加组合环ring

     Android渐变GradientDrawable叠加组合环ring 写一个Android环形shape之间的叠加组合形成新图像的例子.代码: <?xml version="1. ...

  2. git clone, push, pull, fetch 的用法

    Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能. Git有很多优势,其中之一就是远程操作非常简便.本文详细介绍5个Git命令,它们的概念和用法,理解了这些内容,你就会完全掌握Gi ...

  3. java Web项目Service层通用接口和entityVo对象与entity对象转化问题的解决方案

    Service层的接口中有一些比较常用方法,一次又一次的在新的Service层中被书写,所以懒惰的程序员又烦了,他们决定写个通用接口来解决这个问题. 有些项目中,实体类即承担接收表单数据的任务,又承担 ...

  4. js去除字符串两边的空格

    bless = bless.replace(/(^\s*)|(\s*$)/g, "") // 去掉两边的空格

  5. tomcat并发数

    Tomcat的最大并发数是可以配置的,实际运用中,最大并发数与硬件性能和CPU数量都有很大关系的.更好的硬件,更多的处理器都会使Tomcat支持更多的并发. Tomcat默认的HTTP实现是采用阻塞式 ...

  6. maven之发布项目到nexus【clean deploy命令】

    原文:http://m.blog.csdn.net/article/details?id=49667971 当我们的项目开发完成以后,可能要进行发布(如果是独立的项目,就不需要发布啦,如果是模块项目, ...

  7. spring mvc 选中多文件同时上传(利用input元素的multiple属性)

    原文:http://m.blog.csdn.net/article/details?id=51351388 <!DOCTYPE html> <html> <head> ...

  8. jenkins节约硬盘空间的几个办法

    jenkins真是费硬盘和内存,我们先聊聊硬盘问题怎么解决: 1.不要保留太多的构建记录.发布包数量 相关描述如下:取最先匹配进行执行 2.构建完,删除吧

  9. Android切图注意事项

    1.App Logo大小共五种: 48*48 72*72 96*96 144*144 192*192 2. App启动页所需尺寸: 320×480 480×800 720*1280 1080*1920 ...

  10. Direct Buffer vs. Heap Buffer

    1. 劣势:创建和释放Direct Buffer的代价比Heap Buffer得要高. 2. 差别:Direct Buffer不是分配在堆上的,它不被GC直接管理(但Direct Buffer的JAV ...