生日蛋糕(Birthday)

输入文件:cake.in

输出文件:cake.out

时间限制:1s 空间限制:32M

问题描述

今天是你的妹妹的生日。依照传统,她将亲手将自己的圆形生日蛋糕切开。但她还太小,不

擅长切蛋糕。她的每一刀都彻底穿过整个蛋糕。当然,蛋糕不一定是被均分的。更糟糕的是,

她一定要不停的切,直到她认为蛋糕被分成了足够多份。

好不容易蛋糕切完了,面对“伤痕累累”的蛋糕,你想知道它到底被切成了多少块。直接手

算是不现实的,所以你打开了笔记本,并写了一个程序来帮你数。

你的任务是:给定妹妹的切法,求蛋糕被分成了多少块。为了简单起见,你可以认为每一刀

的痕迹没有厚度,且没有两刀切过同一条直线。

输入

第一行包含一个数 r,表示圆形蛋糕的直径(1≤r≤1000)。蛋糕被放在一个 x-y 坐标系上,圆

心在(0, 0)。

第二行包含一个数 n,表示妹妹切的刀数(1≤n≤1000)。

接下来 n 行每行描述一刀,用四个空格分隔的整数 x1, y1, x2, y2 表示此刀的轨迹是从(x1, y1)

到(x2, y2),这两个点都在蛋糕的外面,同时保证两点间的线段经过蛋糕内部。注意:可能有多刀的

轨迹交于同一点。

输出

输出一个整数,表示蛋糕被切成了多少份。

样例输入

10

3

-15 15 15 -15

1 12 -6 -12

10 4 -10 -8

样例输出

7

说明

输入样例蛋糕半径为 10。第一刀从(-15, 15)切到(15, -15),第二刀从(1, 12)到(-6,

-12),第三刀从(10, 4)到(-10, -8)。所以整个蛋糕被分成了 7 份,答案就是 7。

评分

对于每一个测试点,如果你的答案正确,你将得到 100%的分数,否则不得分。

对于近 20%的数据,有些部分可能非常非常细小。

这一题要通过自己画图找规律

可以发现新加入一条直线,假设它与之前的直线在圆内产生了$p$个不同的交点

那么它对答案的贡献就是$p+1$

然后考虑怎么求交点

一条直线的方程可以写成$A*x+B*y+C=0$

对于给定的两点$(x_1,y_1),(x_2,y_2)$,他们的方程中$A=y_2-y_1,B=x_2-x_1,C=x_1*y_2-y_1*x_2$

对于$l_1=A_1*x+B_1*y+C_1,l_2=A_2*x+B_2*y+C_2$,它们的交点$(X,Y)$满足$A_1*X+B_1*Y+C_1=A_2*X+B_2*Y+C_2$

二元一次方程组解出$(X,Y)$

最后还要注意精度问题,$eps$取$10^{-7}$到$10^{-8}$就可以过了

听老师说两直线求交点的正解貌似要用到叉积,这样可以避免因为精度产生的错误

看了一下,感觉很难写的样子

然而叉积联赛不考(其实是我懒)就暂时放一边啦

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1005;
const double eps=1e-7;
int n,r,ans;
struct line{double a,b,c;} L[N];
struct node{double x,y;} Nd[N*N],tmp[N*N];
int cnt;
bool cmp(node u,node v) {return u.x<v.x;}
void solve(int l1,int l2)
{double tx=(L[l1].c*L[l2].b-L[l2].c*L[l1].b)/(L[l1].b*L[l2].a-L[l1].a*L[l2].b);double ty=(L[l1].c*L[l2].a-L[l1].a*L[l2].c)/(L[l2].b*L[l1].a-L[l1].b*L[l2].a);if(tx<=1000.0 && ty<=1000.0){//cout<<tx<<" "<<ty<<endl;if(tx*tx+ty*ty<=(double)(r*r)) Nd[++cnt].x=tx,Nd[cnt].y=ty;}
}
int main()
{freopen("cake.in","r",stdin); freopen("cake.out","w",stdout);scanf("%d%d",&r,&n);for(int i=1;i<=n;++i){int a,b,c,d;scanf("%d%d%d%d",&a,&b,&c,&d);L[i].a=b-d,L[i].b=c-a,L[i].c=1ll*a*d-1ll*b*c;}ans=1;for(int i=1;i<=n;++i){cnt=0;int p=0;for(int j=1;j<i;++j) solve(i,j);sort(Nd+1,Nd+cnt+1,cmp);tmp[0].x=tmp[0].y=-1000.0;for(int i=1;i<=cnt;++i)if(abs(tmp[p].x-Nd[i].x)>eps || abs(tmp[p].y-Nd[i].y)>eps) tmp[++p]=Nd[i];//cout<<p<<endl;ans+=p+1;}printf("%d",ans);return 0;
}

转载于:https://www.cnblogs.com/w19567/p/11290721.html

test 190802 生日蛋糕相关推荐

  1. POJ1190 生日蛋糕

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18103   Accepted: 6439 Description 7月17 ...

  2. POJ 1190 生日蛋糕 【DFS + 极限剪枝】

    题目传送门:http://poj.org/problem?id=1190 参考剪枝:https://blog.csdn.net/nvfumayx/article/details/6653111 生日蛋 ...

  3. 用python绘制漂亮的图形-用Python代码绘制漂亮的生日蛋糕,python

    #如何用python绘制生日蛋糕? 平时在经常在b站看到up主绘制生日蛋糕的精美图片.以前学过c.c++语言,也想着用C去绘制一些生日蛋糕,绘制一些女神喜欢的小礼物,不过实现起来比较麻烦,刚好学了一些 ...

  4. poj 1190 生日蛋糕 难|供自己瞻仰

    7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为Hi的圆柱.当 ...

  5. POJ - 1190 生日蛋糕(dfs+剪枝)

    题目链接:点击查看 题目大意:给出生日蛋糕的总体积,以及有多少层,我们要求下面的每一层的高度和半径都要比上面一层的大,并且都是整数,求满足要求的最小表面积 题目分析:因为题目提到了半径和高度都是整数, ...

  6. DFS--POJ 1190 生日蛋糕

    Description 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri ...

  7. 【模拟】生日蛋糕(jzoj 1613)

    生日蛋糕 题目大意: 一个正方形蛋糕,竖着横着各切一刀,使他变成四块正方形蛋糕,蛋糕中有一些巧克力,而小明只能拿巧克力最少的一块,请问小明要怎么切才能吃到最多的巧克力 样例输入 8 -#-#- .## ...

  8. 0076-小升初1:生日蛋糕

    题目 小升初1:生日蛋糕 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 一个中学生(在线测评系统的系统管理员)过生日了,他邀 ...

  9. 生日蛋糕(信息学奥赛一本通-T1441)

    [题目描述] 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体.设从下往上数第i(1≤i≤M)层蛋糕是半径为Ri, 高度为Hi的圆柱.当i<M ...

最新文章

  1. java实现异步调用实例
  2. php_rce-攻防世界-web-ThinkPHP版本5的相关漏洞
  3. C# 依据鼠标坐标取网页内成员坐标.ie
  4. 什么时候应该避免写代码注释?
  5. 无法获得 VMCI 驱动程序的版本: 句柄无效。 驱动程序“vmci.sys”的版本不正确。请尝试重新安装 VMware Workstation。 开启模块 DevicePowerOn 的操作失败
  6. windows7网购火车票全解析
  7. 电子计算机教室宣传标语,电子备课室宣传标语有哪些
  8. Alexa技能开发从创建到发布
  9. MATLAB命令大全
  10. dell t640 添加硬盘_Dell EMC PowerEdge T640详解
  11. 小猪短租网requests库使用
  12. 自考2018版《管理经济学》第一章导论——思维导图
  13. 六大设计原则(SOLID)备忘
  14. 经济学原理上中国故事2019尔雅满分答案
  15. php 聚合广告平台,GitHub - mystudytime/easy-amazon-advertising: 基于 amazon advertising v2 接口的 PHP 广告信息组件...
  16. 【工程实践】jsonlines 读取多行数据
  17. PARI/GP 语言:从入门到实现大素数判定与大数分解
  18. Dev --gridView中CheckItem的多选设置
  19. 你真的认为自己熟练Python?带你一篇文章 查漏补缺,感受自己离深入掌握 Python 还有多远。
  20. CCF CSP认证 难度及经历

热门文章

  1. 全角半角最简单的方法(C#)
  2. 04_MyBatis03
  3. Kaggle-猫狗图像分类全流程实践(支持迁移学习和其他分类任务迁移)
  4. 俄罗斯总统确认支持自由软件
  5. 类与对象的创建详解(适合新人)
  6. 安卓全面屏手机获取虚拟导航栏高度
  7. text-indent html,css text-indent属性怎么用
  8. 第十三届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
  9. otter 数据库单向同步和双向同步
  10. 武汉交通职业学院计算机分数线,武汉交通职业学院录取分数线2021是多少分(附历年录取分数线)...