luogu P4515 [COCI2009-2010#6] XOR

描述

坐标系下有若干个等腰直角三角形,且每个等腰直角三角形的直角顶点都在左下方,两腰与坐标轴平行。被奇数个三角形覆盖的面

积部分为灰色,被偶数个三角形覆盖的面积部分为白色,如下图所示。

已知 NN个等腰直角三角形的顶点坐标及腰长,求灰色部分面积。

输入输出格式

输入格式:

输入第一行包含一个整数 NN,表示等腰直角三角形数量。

接下来 NN行,每行三个整数 X, Y, RX,Y,R,分别表示等腰直角三角形的顶点坐标 (X, Y)(X,Y)与腰长 RR。

输入输出样例

输入样例#1: 复制

3
1 1 2
7 1 6
5 3 4

输出样例#1:

24.0

这是自己做出的第一道容斥题(除了一些SB容斥),虽然这道题也不算太难,而且我做了一个晚上。总之就是自己在容斥上还是太菜了。

还是来说题吧。首先要会求多个三角形的交。显然这道题中两个等腰直角的交还是一个等腰直角三角形。我的做法是分类讨论,不如洛谷上题解那么简洁,于是就不说了。

重点是算出容斥系数。我们设个三角形的交的容斥系数为。显然。对于1" class="mathcode" src="https://private.codecogs.com/gif.latex?i%3E1">,的情况,我们先设初值,显然如果为奇数,那么初值为1,否则为0。然后我们要容斥去重。。计算个三角形的交的时候,个三角形的交会被计算次。

然后通过观察证明可以知道

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<set>
#include<map>
#include<vector>
#include<ctime>
#include<iomanip>
#define ll long long
#define N 11 using namespace std;
inline int Get() {int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}while('0'<=ch&&ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;} int n;
ll ans;
ll f[N];
ll c[N][N];
struct tri {ll x,y,r;}s[N],tem,g;
void work(tri a,tri b) {
if(a.y>b.y) swap(a,b);
if(a.x<=b.x) {
int r=min(b.r,a.r-(b.x+b.y-a.x-a.y));
if(r<0) return g.r=-1,void();
g=b;
g.r=r;
} else {
int r=min(a.y+a.r-b.y,b.x+b.r-a.x);
if(r<0) return g.r=-1,void();
g.x=a.x,g.y=b.y;
g.r=r;
}
}
void dfs(int v,ll x,ll y,ll r,int tot) {
if(r<=0&&tot) return ;
if(v>n) {
if(!tot) return ;
ans+=r*r*f[tot];
return ;
}
dfs(v+1,x,y,r,tot);
if(!tot) {
dfs(v+1,s[v].x,s[v].y,s[v].r,tot+1);
} else {
tem.x=x,tem.y=y,tem.r=r;
work(s[v],tem);
dfs(v+1,g.x,g.y,g.r,tot+1);
}
}
int main() {
n=Get();
c[0][0]=1;
for(int i=1;i<=n;i++) {
for(int j=0;j<=i;j++) {
c[i][j]=(!j||i==j)?1:c[i-1][j-1]+c[i-1][j];
}
}
for(int i=1;i<=n;i++) {
f[i]=(i&1)?1:0;
for(int j=1;j<i;j++) {
f[i]-=f[j]*c[i][j];
}
}
//f[i]=(-1)^(i+1)*2^(i-1)
for(int i=1;i<=n;i++) {
s[i].x=Get(),s[i].y=Get(),s[i].r=Get();
}
dfs(1,0,0,0,0);
cout<<fixed<<setprecision(1)<<1.0*ans/2;
return 0;
}

luogu P4515 [COCI2009-2010#6] XOR的更多相关文章

  1. luogu P4515 [COCI2009-2010#6] XOR 容斥

    LINK:XOR 一个不常见的容斥套路题. 以往是只求三角形面积的交 现在需要求被奇数次覆盖的区域的面积. 打住 求三角形面积的交我也不会写 不过这道题的三角形非常特殊 等腰直角 且直角点都在左下方 ...

  2. [Luogu P4180][BJWC 2010]严格次小生成树

    严格次小生成树,关键是“严格”,如果是不严格的其实只需要枚举每条不在最小生成树的边,如果得到边权和大于等于最小生成树的结束就行.原理就是因为Kruskal非常贪心,只要随便改一条边就能得到一个非严格的 ...

  3. luogu P4385 [COCI2009]Dvapravca

    传送门 我真的弱,正解都不会还打了个错的暴力 考虑平行线与x轴平行,那么可以按照y为第一关键字升序,x为第二关键字升序排序,然后合法的一段红点就是连续的一段,答案也就是最大的连续红色段 推广到一般情况 ...

  4. POJ 1703 Find them, Catch them(并查集高级应用)

    手动博客搬家:本文发表于20170805 21:25:49, 原地址https://blog.csdn.net/suncongbo/article/details/76735893 URL: http ...

  5. luogu P2574 XOR的艺术 (线段树)

    luogu P2574 XOR的艺术 (线段树) 算是比较简单的线段树. 当区间修改时.\(1 xor 1 = 0,0 xor 1 = 1\)所以就是区间元素个数减去以前的\(1\)的个数就是现在\( ...

  6. [luogu]P1800 software_NOI导刊2010提高(06)[DP][二分答案]

    [luogu]P1800 software_NOI导刊2010提高(06) 题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块, ...

  7. Luogu P1801 黑匣子_NOI导刊2010提高(06)

    P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个 ...

  8. 【luogu P1774 最接近神的人_NOI导刊2010提高(02)】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1774 归并排序求逆序对. #include <cstdio> #define livelove ...

  9. 【luogu P1801 黑匣子_NOI导刊2010提高(06)】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1801 替罪羊树吼啊! #include <cstdio> #include <cstrin ...

随机推荐

  1. Java提高篇之抽象类与接口

    接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念 ...

  2. Linux 服务器命令,持续更新……

    记录一下常用命令给自己备忘备查,会持续更新-- 一.查看和修改Linux的时间 1. 查看时间和日期,命令: date 2.设定时间和日期 例如:将系统日期修改成2020年2月14日12点的命令: d ...

  3. 快速排序的Java和python实现,亲测实际可用

    1.基本思想 快速排序每趟排序确定一个元素x的位置,使用的方式是 将大于元素x的值放大x的右边,小于元素x的值放大x的左边.当确定x的位置之后,再分别对x左边的数组和右边的数组进行快速排序即可. 2. ...

  4. Linux IPC基础(System V)

    简介 IPC 主要有消息队列.信号量和共享内存3种机制.和文件一样,IPC 在使用前必须先创建,使用 ipcs 命令可以查看当前系统正在使用的 IPC 工具: 由以上可以看出,一个 IPC 至少包含 ...

  5. dom操作------获取长/宽/距离等值的若干方法

    1.offsetLeft:获取元素边框以外至文档顶的距离:若其祖先元素有定位属性position则返回值为元素到该定位元素的距离,不包括祖先元素的三宽(padding,border,margin),且 ...

  6. SQL Server 2008 management studio 无法连接到(local)解决方法

    背景:安装VS2010之后,自带的 SQL Server 2008 Express 不具备management studio,于是下载了SQL Server 2008 Express  版本并全新安装 ...

  7. H指数

    H指数是用来综合衡量学者发表论文的数量和质量的指标,若某学者共发表N篇论文,H指数是指存在h 篇论文至少每篇有h 引用量,剩下的N-h篇中,每篇都不超过h引用量 计算H指数的方法:1.排序法思路:先将 ...

  8. elasticsearch6.7 05. Document APIs(5)Delete By Query API

    4.Delete By Query API _delete_by_query API可以删除某个匹配条件的文档: POST twitter/_delete_by_query { "query ...

  9. vue自制switch滑块

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. python之线程相关操作

    1.线程: 一个进程可以有多个线程,共享一个进程的资源: 2.进程线程的区别:  进程是资源分配的最小单位,线程是程序执行的最小单位 3.python中线程模块threading, 提供的类: Thr ...