UVa 10167 生日蛋糕
来源:互联网 发布:jsp中调用java方法 编辑:程序博客网 时间:2024/05/21 09:26
题意:有一个半径为100的圆形蛋糕,蛋糕上有一些樱桃。现在妈妈要把蛋糕分两半,因为要均分给两人,所以肯定是从原点切出来的。然后还需要两半蛋糕各含一半数目的樱桃,而且所切的地方不会切到樱桃。求所切下的这条直线的方程,Ax+By=0 中的 A 和 B 的值。
cherry 樱桃;beeline 直线;coordinate 坐标
思路:可以看到大体的思路就是找到一条直线,使得所有樱桃的坐标满足 Ax+By>0 和 <0 的个数各一半,而且没有等于0的。而且很容易看到应该不止一条直线,甚至对同一条直线,A 和 B 的值都不能唯一。可以想到用枚举。主要就是 A 和 B 的范围的确定。本想确定下范围的,无奈算来算去发现A、B的范围好像无法确定,看别人都是从[-500,500]枚举的,但是谁能解释下题目中的 mustn't 的意思!是笔误吗,还是有别的意思?
如果想优化,可以用一个vis数组避免重复枚举相同的直线,x+y=0和2x+2y=0是相同的直线。
Code:
#include<stdio.h>#define N 55void solve(int n);int cherry[2*N][2];int main(){ int n; while(scanf("%d",&n)==1 && n) { for(int i=0;i<2*n;++i) { scanf("%d%d",&cherry[i][0],&cherry[i][1]); } solve(n); } return 0; }void solve(int n){ for(int a=-500;a<=500;++a) { int flag=0; for(int b=-500;b<=500;++b) { int cnt=0;//每一组a,b值时,Ax+By>0的个数 int cherryflag=0;//是否经过樱桃 for(int i=0;i<2*n;++i) { int val=a*cherry[i][0]+b*cherry[i][1]; if(val==0) { cherryflag=1; break;}//直线不能经过樱桃 if(val>0) cnt++; } if(!cherryflag && cnt==n) { flag=1; printf("%d %d\n",a,b); break;} } if(flag) { break;} } }
0 0
- UVA 10167 生日蛋糕
- UVa 10167 生日蛋糕
- UVa Problem 10167 Birthday Cake (生日蛋糕)
- UVa 10167 Birthday Cake (白皮书第七章 生日蛋糕)
- 生日蛋糕
- 生日蛋糕
- 生日蛋糕
- 生日蛋糕
- 生日蛋糕
- 生日蛋糕!
- 生日蛋糕
- 生日蛋糕
- 生日蛋糕(noi99)
- PKU1190 生日蛋糕
- pku1190 生日蛋糕
- POJ_1190_生日蛋糕
- 1068 生日蛋糕
- UVA10167 生日蛋糕
- mysqldump使用方法
- JTAG接口
- Activiti工作流那些事
- 从概念理解Lucene的Index(索引)文档模型
- 欢迎使用CSDN-markdown编辑器
- UVa 10167 生日蛋糕
- 解决myeclipse10.x的Servers产生的at com.genuitec.eclipse.ast.deploy.core.Deployment.<init>(Unknown Source)
- 欢迎使用CSDN-markdown编辑器
- 【问题收录】ubuntu下weka链接mysql数据库
- 定义 & 声明
- 多表连接的三种方式详解 HASH JOIN MERGE JOIN NESTED LOOP
- 1001. A+B Format (20)
- Maven学习笔记(六)m2eclipse的安装
- OpenCV Using Python——加载和显示图像