WOJ-1097
Description
JYY has placed N bombs on the plane. We assume that the firepower area of each bomb is circle whose radius is one unit. Can you tell JYY the total firepower overlay area, just have a try ^_^
Input
Standard input will contain multiple test cases. For each test case, the first line is an integer N(N <= 100), which is the total number of the bombs. Then N lines followed and each line contains two integers X and Y, which means the 2-D coordinate of each bomb.
Output
For each test cases, output the total firepower overlay area(accurate to two fractional digits) in one line.
Sample Input
31 11 22 2
Sample Output
6.84
解题思路:1.首先想直接将N个圆的面积N*π,再减去相交的部分,由于A∪B∪C=A+B+C-A∩B-A∩C-B∩C+A∩B∩C比较麻烦。要记住所有相交的位置,所以本题采用相加的策略。
2.相加:分析每个圆会占据4个正方形的位置,则记录四个正方形的形状,共九种状态:如下依次为123456789:
然后1/2/3/4对应的面积为π/4,
5/6/7/8对应的面积为π/6+sin(π/3)/2
9的面积为1
则粘贴代码如下:
#include
#include
#include
#define Pi 3.1415926
typedef struct square{
int x;
int y;
int t;
struct square * next;
}square;
square * search(int x, int y, square * head, int type){
square * cur = head;
int flag = 0;
while (cur->next != NULL){
cur = cur->next;
if ((x == cur->x) && (y == cur->y)){
flag = 1;
if (type == 1){
if (cur->t == 1) cur->t = 1;
else if (cur->t == 2 || cur->t == 5) cur->t = 5;
else if (cur->t == 3 || cur->t == 6) cur->t = 6;
else if (cur->t == 4 || cur->t == 7 || cur->t == 8 || cur->t == 9) cur->t = 9;
break;
}
else if (type == 2){
if (cur->t == 1 || cur->t == 5) cur->t = 5;
else if (cur->t == 2) cur->t = 2;
else if (cur->t == 3 || cur->t == 6 || cur->t == 8 || cur->t == 9) cur->t = 9;
else if (cur->t == 4 || cur->t == 7)cur->t = 7;
break;
}
else if (type == 3){
if (cur->t == 1 || cur->t == 6) cur->t = 6;
else if (cur->t == 2 || cur->t == 7 || cur->t == 5 || cur->t == 9) cur->t = 9;
else if (cur->t == 3) cur->t = 3;
else if (cur->t == 4 || cur->t == 8) cur->t = 8;
break;
}
else if (type == 4){
if (cur->t == 1 || cur->t == 5 || cur->t == 6 || cur->t == 9) cur->t = 9;
else if (cur->t == 2 || cur->t == 7) cur->t = 7;
else if (cur->t == 3 || cur->t == 8) cur->t = 8;
else if (cur->t == 4) cur->t = 4;
break;
}
}
}
if ((cur->next == NULL) && (flag == 0)){
square * temp = malloc(sizeof(square));
temp->next = NULL;
temp->x = x;
temp->y = y;
temp->t = type;
cur->next = temp;
}
return head;
}
double cal(square * head){
double ans = 0;
square * pres = head;
while (pres->next != NULL){
pres = pres->next;
if ((pres->t >= 1) && (pres->t <= 4)){
ans += Pi / 4.0;
}
else if ((pres->t >= 5) && (pres->t <= 8)){
ans += Pi / 6.0 + ((double)sin(Pi / 3.0)) / 2.0;
}
else if (pres->t == 9){
ans += 1;
}
}
return ans;
}
int main(){
int N;
int i;
int x, y;
square * head = malloc(sizeof(square));
//printf("%lf", ((double)sin(Pi / 3.0)) / 2.0);
head->next = NULL;
while (scanf_s("%d", &N) != EOF){
double res = 0;
for (i = 0; i < N; i++){
scanf_s("%d %d", &x, &y);
res = cal(head);
search(x - 1, y - 1, head, 1);
search(x, y - 1, head, 2);
search(x - 1, y, head, 3);
search(x, y, head, 4);
square * temp = head;
square * cut = temp;
while (temp->next != NULL){
printf("x=%d,y=%d,type=%d\n", temp->next->x, temp->next->y, temp->next->t);
temp = temp->next;
}
}
res = cal(head);
printf("res=%.2f", res);
square * temp = head;
square * cut = temp;
while (temp->next != NULL){
cut = temp->next;
free(temp);
temp = cut;
}
}
system("pause");
}
WOJ-1097的更多相关文章
- WOJ -1204
WOJ -1204 1 出现次数大于一半 那么就利用普通的堆栈的思想,如果删除两个不同的元素,原来的多数元素还是多数元素,所以采取按条件入栈的方法,如果和top元素相同则入栈,否则top--,此元素也 ...
- zoj 1097 普吕弗序列
题目大意:输入一颗无根树的括号序列,求这棵树的普吕弗序列. 分析思路: 1)普吕弗序列,可以参考维基百科,其做法是找出树中编号最小的叶子节点,并将此叶子节点及边删除,并输出其邻接的节点标号: 2)递归 ...
- 【BZOJ】1097: [POI2007]旅游景点atr(spfa+状压dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1097 首先还是我很sb....想到了分层图想不到怎么串起来,,,以为用拓扑序搞转移,,后来感到不行. ...
- [swustoj 1097] 2014
2014(1097) 问题描述 今年是2014年,所以小明喜欢2014的每一位数字(即:2,0,1,4),小明想知道在区间[l,r](包括l和r)中有多少个数中含有这4个数字(数字无前缀零). 输入 ...
- BZOJ 1097: [POI2007]旅游景点atr( 最短路 + 状压dp )
先最短路预处理, 然后状压就行了 -------------------------------------------------------------------------- #include ...
- [Swust OJ 1097]--2014(数位dp)
题目链接:http://acm.swust.edu.cn/problem/1097/ Time limit(ms): 1000 Memory limit(kb): 32768 今年是2014年,所 ...
- hdu 1097 A hard puzzle 快速幂取模
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1097 分析:简单题,快速幂取模, 由于只要求输出最后一位,所以开始就可以直接mod10. /*A ha ...
- PAT 1097 Deduplication on a Linked List[比较]
1097 Deduplication on a Linked List(25 分) Given a singly linked list L with integer keys, you are su ...
- LightOJ 1097 - Lucky Number 线段树
http://www.lightoj.com/volume_showproblem.php?problem=1097 题意:一个自然数序列,先去掉所有偶数项,在此基础上的序列的第二项为3,则删去所有3 ...
- HihoCoder 1097 Prim算法
1097 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可以 ...
随机推荐
- C#报修系统Ⅱ
用户需求: 1.用户可以注册,可以登录. 2.需要一个报修界面,当点击“报修”按钮时,软件会把用户报修的信息保存起来,更新报修次数,同时会清空相应的文本框,软件还要要检查所有文本框是否为空,空的话给出 ...
- XMLHttpRequest 加载进度
XMLHttpRequest 相关资料请移步这里直接查看,我这里就不在赘述: https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpReque ...
- WebSocket实战之————Workerman服务器的安装启动
安装php apt-get install php5-cli root@iZ23b64pe35Z:/home/www# php -v PHP 5.5.9-1ubuntu4.20 (cli) (buil ...
- (转)Uiautomator——API详解
原文链接:http://www.cnblogs.com/by-dream/p/4921701.html#3328376 以一个简单的例子开始吧.我们完成一个 " 打开QQ,进入QQ空间,然后 ...
- 【转载】协同过滤 & Spark机器学习实战
因为协同过滤内容比较多,就新开一篇文章啦~~ 聚类和线性回归的实战,可以看:http://www.cnblogs.com/charlesblc/p/6159187.html 协同过滤实战,仍然参考:h ...
- php注意事项2
1.不要使用相对路径 常常会看到: require_once('../../lib/some_class.php'); 该方法有很多缺点: 它首先查找指定的php包含路径, 然后查找当前目录. 因此会 ...
- StringBuffer delete
描述 java.lang.StringBuffer.delete() 方法将删除这个序列的一个子字符串中的字符. 子字符串的开始在指定的start和延伸处的字符索引end - 1或结束的序列,如果不存 ...
- Java完成最简单的WebService创建及使用(REST方式,Jersey框架)
前言: 一直以来都对WebService感兴趣,但因为难以理解WebService到底是什么,所以了解甚少.周二的时候有个跟我关系比较好的同事想要自己写个WebService的小Demo,希望能够做成 ...
- Assembly.Load(path).CreateInstance 反射出错解决办法
最近采用工厂模式反射DAL层出现一些问题,所以自己想写一下自己认为标准解决的思路和解决方法以备后用. 1.这是项目结构 2.这是DALFactory 反射代码 #region 创建对象(不使用缓存) ...
- HTML 文本格式化<b><big><em><i><small><strong><sub><sup><ins><del>
<b> 标签-粗体 定义和用法: <b>标签规定粗体文本. 提示和注释 注释:根据 HTML5 规范,在没有其他合适标签更合适时,才应该把 <b> 标签作为最后的选 ...