test 190802 生日蛋糕
生日蛋糕(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 生日蛋糕相关推荐
- POJ1190 生日蛋糕
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18103 Accepted: 6439 Description 7月17 ...
- POJ 1190 生日蛋糕 【DFS + 极限剪枝】
题目传送门:http://poj.org/problem?id=1190 参考剪枝:https://blog.csdn.net/nvfumayx/article/details/6653111 生日蛋 ...
- 用python绘制漂亮的图形-用Python代码绘制漂亮的生日蛋糕,python
#如何用python绘制生日蛋糕? 平时在经常在b站看到up主绘制生日蛋糕的精美图片.以前学过c.c++语言,也想着用C去绘制一些生日蛋糕,绘制一些女神喜欢的小礼物,不过实现起来比较麻烦,刚好学了一些 ...
- poj 1190 生日蛋糕 难|供自己瞻仰
7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为Hi的圆柱.当 ...
- POJ - 1190 生日蛋糕(dfs+剪枝)
题目链接:点击查看 题目大意:给出生日蛋糕的总体积,以及有多少层,我们要求下面的每一层的高度和半径都要比上面一层的大,并且都是整数,求满足要求的最小表面积 题目分析:因为题目提到了半径和高度都是整数, ...
- DFS--POJ 1190 生日蛋糕
Description 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri ...
- 【模拟】生日蛋糕(jzoj 1613)
生日蛋糕 题目大意: 一个正方形蛋糕,竖着横着各切一刀,使他变成四块正方形蛋糕,蛋糕中有一些巧克力,而小明只能拿巧克力最少的一块,请问小明要怎么切才能吃到最多的巧克力 样例输入 8 -#-#- .## ...
- 0076-小升初1:生日蛋糕
题目 小升初1:生日蛋糕 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 一个中学生(在线测评系统的系统管理员)过生日了,他邀 ...
- 生日蛋糕(信息学奥赛一本通-T1441)
[题目描述] 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体.设从下往上数第i(1≤i≤M)层蛋糕是半径为Ri, 高度为Hi的圆柱.当i<M ...
最新文章
- java实现异步调用实例
- php_rce-攻防世界-web-ThinkPHP版本5的相关漏洞
- C# 依据鼠标坐标取网页内成员坐标.ie
- 什么时候应该避免写代码注释?
- 无法获得 VMCI 驱动程序的版本: 句柄无效。 驱动程序“vmci.sys”的版本不正确。请尝试重新安装 VMware Workstation。 开启模块 DevicePowerOn 的操作失败
- windows7网购火车票全解析
- 电子计算机教室宣传标语,电子备课室宣传标语有哪些
- Alexa技能开发从创建到发布
- MATLAB命令大全
- dell t640 添加硬盘_Dell EMC PowerEdge T640详解
- 小猪短租网requests库使用
- 自考2018版《管理经济学》第一章导论——思维导图
- 六大设计原则(SOLID)备忘
- 经济学原理上中国故事2019尔雅满分答案
- php 聚合广告平台,GitHub - mystudytime/easy-amazon-advertising: 基于 amazon advertising v2 接口的 PHP 广告信息组件...
- 【工程实践】jsonlines 读取多行数据
- PARI/GP 语言:从入门到实现大素数判定与大数分解
- Dev --gridView中CheckItem的多选设置
- 你真的认为自己熟练Python?带你一篇文章 查漏补缺,感受自己离深入掌握 Python 还有多远。
- CCF CSP认证 难度及经历
热门文章
- 全角半角最简单的方法(C#)
- 04_MyBatis03
- Kaggle-猫狗图像分类全流程实践(支持迁移学习和其他分类任务迁移)
- 俄罗斯总统确认支持自由软件
- 类与对象的创建详解(适合新人)
- 安卓全面屏手机获取虚拟导航栏高度
- text-indent html,css text-indent属性怎么用
- 第十三届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
- otter 数据库单向同步和双向同步
- 武汉交通职业学院计算机分数线,武汉交通职业学院录取分数线2021是多少分(附历年录取分数线)...