题目大意:

思路:

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

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

四面体的重心为四个点的坐标和/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. Leetcode 289.生命游戏

    生命游戏 根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机. 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞.每个细胞具有一个初始状 ...

  2. Laya Tween循环

    Laya Tween循环 @author ixenos 需求:做一个循环的缓动动画 方案: 1)如果只是线性变化,那么直接使用timer或者frameLoop来变化 2)如果需要有非线性变化,那么使用 ...

  3. bzoj 4736 /uoj274【清华集训2016】温暖会指引我们前行 lct

    [清华集训2016]温暖会指引我们前行 统计 描述 提交 自定义测试 寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出无助的哀嚎 “冻死宝宝了!” 这时 远处的天边出现了 ...

  4. C#的特性学习草稿

    原文发布时间为:2008-11-22 -- 来源于本人的百度文章 [由搬家工具导入] 举个简单的例子: 先定义个特性 从Attribute继承,并标明用法 [AttributeUsage(Attrib ...

  5. msp430入门编程35

    msp430中C语言的可移植--规划软件层次

  6. ESI 动态缓存技术[转载]

    任何一个Web网站的内容都是在不断更新和变化,但这并不意味这这个网站的内容就是动态内容,事实上,动态的内容是指用户每次点击 相同的链接时取的的内容是由Web服务器应用程序生成的,如常见得ASP,JSP ...

  7. APP后端处理表情的一些技巧

    app应用中文字夹带表情是个很常见的现象.甚至一些40多岁的大叔级用户,也喜欢在自己的昵称中夹带表情,在产品运营后发现这个现象,彻底颠覆了我的世界观. 在后台处理表情的时间,我遇到过下面3个问题: 1 ...

  8. Palindrome--poj 1159(最长公共子字符串+滚动数字)

    http://poj.org/problem?id=1159 题目大意:  给你一个n  代表n个字符   第二行给你一个字符串  求使这个字符串变成回文字符串 最少需要添加多少个字符 分析:   原 ...

  9. 2017CodeM初赛B场

    A.合并字符串价值(loj6174) 分析: 普通暴力:枚举两个分界线,那么ans=Σmin(Al(c)+Bl(c),Ar(c)+Br(c)),这样是O(n^2),会TLE 考虑枚举a的分界线,b的答 ...

  10. C/C++实现bmp文件读写

    之前知道点bmp图的格式,然后对8位操作过,然后今天弄了一下24位真彩色的. C++读取.旋转和保存bmp图像文件编程实现 主要是理解bmp文件的格式8/24位的区别 8位图有调色板,24位在文件头和 ...