博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 P4515 [COCI2009-2010#6] XOR
阅读量:5064 次
发布时间:2019-06-12

本文共 1369 字,大约阅读时间需要 4 分钟。

题意

平面直角坐标系中有一些等腰直角三角形,且直角边平行于坐标轴,直角顶点在右下方,求奇数次被覆盖的面积。N<=10。输入为x,y,r,分别表示三角形顶点的坐标与三角形的边长。

如:

总面积为0.5+2+4.5-0.5-0.5=6


思考

看到数据范围,就肯定是优美的暴力。

这题思路很清奇。首先我们要先求出任意几个三角形面积的交,但我们知道两个之间的关系就行了,因为这样特殊的三角形最后的交必然一模一样(只是缩放了)。

为了算出面积的交,我们先考虑算出最后交的三角形的边长,因为这样子平方一下除以二就是面积。

我们还知道,交的边长关于x,y,r一定是一次关系,至少是只有一次项,而且没有常数。我们不妨考虑这些三角形的y都相等。

 

如图,这种情况下的边长为max{0,min{xi+ri}-max{xi}},即若有交,x+r一定要最小,这样所有三角形才能够到,再减去x最大的一个。若没交,不难证明结果小于0。

同样地,x都相等时边长为max{0,min{yi+ri}-max{yi}},于是我们考虑合并起来。

经过打表(即我不会证明),我们发现最后的结果为max{0,min{xi+yi+ri}-max{xi}-max{yi}}。

这样完成了第一步。然后容斥考虑面积并。看看每个重叠的三角形对答案的贡献:

不难发现,若有n个三角形重叠,则数量上的贡献为(-2)^(n-1),具体证明归纳法。

dfs一下即可。

代码

1 #include
2 using namespace std; 3 typedef long long int ll; 4 const ll maxn=15; 5 const ll inf=INT_MAX; 6 ll max(ll x,ll y){
return x>y?x:y;} 7 ll x[maxn],y[maxn],r[maxn],n,ans; 8 void dfs(ll s,ll maxx,ll maxy,ll maxc,ll g) 9 {10 if(s==n+1)11 {12 if(g>=1)ans+=pow(-2,g-1)*max(0,maxc-maxx-maxy)*max(0,maxc-maxx-maxy);13 return;14 }15 dfs(s+1,maxx,maxy,maxc,g);16 dfs(s+1,max(maxx,x[s]),max(maxy,y[s]),min(maxc,x[s]+y[s]+r[s]),g+1);17 }18 int main()19 {20 ios::sync_with_stdio(false);21 cin>>n;22 for(int i=1;i<=n;++i)cin>>x[i]>>y[i]>>r[i];23 dfs(1,0,0,inf,0);24 cout<
<
<
View Code

 

转载于:https://www.cnblogs.com/GreenDuck/p/10544464.html

你可能感兴趣的文章
【POJ1845】Sumdiv(数论/约数和定理/等比数列二分求和)
查看>>
在WPF中使用Caliburn.Micro搭建MEF插件化开发框架
查看>>
IdentityServer4-用EF配置Client(一)
查看>>
UWP: 掌握编译型绑定 x:Bind
查看>>
asp.net core系列 35 EF保存数据(2) -- EF系列结束
查看>>
WPF程序加入3D模型
查看>>
WPF中实现多选ComboBox控件
查看>>
读构建之法第四章第十七章有感
查看>>
C#中的IEnumerable<T>知识点
查看>>
android访问链接时候报java.net.MalformedURLException: Protocol not found
查看>>
dwz ie10一直提示数据加载中
查看>>
Windows Phone开发(4):框架和页 转:http://blog.csdn.net/tcjiaan/article/details/7263146
查看>>
Windows Phone Marketplace 发布软件全攻略
查看>>
Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)【转】
查看>>
语义web基础知识学习
查看>>
hexo个人博客添加宠物/鼠标点击效果/博客管理
查看>>
python asyncio 异步实现mongodb数据转xls文件
查看>>
关于WPF的2000件事 02--WPF界面是如何渲染的?
查看>>
单元测试、、、
查看>>
SVN使用教程总结
查看>>