数三角count(归类)
评测方式:文本比较
题目描述
这是一个数三角的游戏。长度为1或SQRT(2)的小木棍放在一个网格上。如图所示,有水平的,垂直的或对角的。对角放置的木棍可以交叉。
avatar
将木棍随意地放在网格上得到的图案可能不含三角形,也可能含一个或多个三角形。如下图所示,
avatar
(a),(b),,(d)和(e)分别含有2,5,12,0,0个三角形。你的任务是写一个程序数出一个图案中的三角形个数。。cpp
输入格式
 输入文件count.in包括N+1行:
先输入图案中木棍的个数N。下面输入这N根木棍的位置,用两个网格坐标表示,这两个坐标分别为木棍两端的位置。网格大小不超过10´10,因此网格左下和右上的坐标分别为(0,0)和(9,9)。
输出格式
 输入文件count.out包括1行:
三角形的个数。
样例
 样例输入
 3
 0 0 0 1
 0 0 1 0
 0 1 1 0
 样例输出
 1
题目分析
这道题有许多细节的地方,而主要方法是描述线段,然后枚举各个点,判断是否是三角形,因为有交叉的情况,我们可以把一个格子分成四个
易错点
1可能会有两条线交叉的情况
 2.有三点共线的情况
具体思路(描述线段)
1.当这条线段是竖着的
if(y1>y2)
			{
				pd[x1][y2][x1][y2+1]=1;
				pd[x1][y2+1][x1][y2]=1;
				pd[x1][y2+1][x1][y1]=1;
				pd[x1][y1][x1][y2+1]=1;
			}
			else
			{
				pd[x1][y1][x1][y1+1]=1;
				pd[x1][y1+1][x1][y1]=1;
				pd[x1][y1+1][x1][y2]=1;
				pd[x1][y2][x1][y1+1]=1;
			}
2当这条线段是横着的
if(x1<x2)
			{
				pd[x1][y1][x1+1][y1]=1;
				pd[x1+1][y1][x1][y1]=1;
				pd[x1+1][y1][x2][y1]=1;
				pd[x2][y1][x1+1][y1]=1;
			}
			else
			{
				pd[x2][y1][x2+1][y1]=1;
				pd[x2+1][y1][x2][y1]=1;
				pd[x2+1][y1][x1][y1]=1;
				pd[x1][y1][x2+1][y1]=1;
			}
3.当这条线段是斜着的
if(x1+y1-x2-y2==4)
		 {
		 	pd[x2+1][y2+1][x1][y1]=1;
		 	pd[x1][y1][x2+1][y2+1]=1;
		 	pd[x2+1][y2+1][x2][y2]=1;
		 	pd[x2][y2][x2+1][y2+1]=1;
		  }
		  if(x2+y2-x1-y1==4)
		  {
		  	pd[x1+1][y1+1][x2][y2]=1;
		  	pd[x2][y2][x1+1][y1+1]=1;
		  	pd[x1+1][y1+1][x1][y1]=1;
		  	pd[x1][y1][x1+1][y1+1]=1;
		  }
		  if(x1+y1==x2+y2)
		  {
		  	pd[x1][y1][(x1+x2)/2][(y1+y2)/2]=1;
		  	pd[(x1+x2)/2][(y1+y2)/2][x1][y1]=1;
		  	pd[x2][y2][(x1+x2)/2][(y1+y2)/2]=1;
		  	pd[(x1+x2)/2][(y1+y2)/2][x2][y2]=1;
		  }
 }
4.然后就是可以对三角形进行统计不果,因为重复所以要/6;
#include<cstdio>
int pd[55][55][55][55];
int n;
int ans;
int x1,x2,y1,y2;
int main()
{
   scanf("%d",&n);
   for(int i=1;i<=n;i++)
   {
   	scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
   	x1*=2;
   	y1*=2;
   	x2*=2;
   	y2*=2;
   	if(x1==x2)
   	{
   		if(y1>y2)
   		{
   			pd[x1][y2][x1][y2+1]=1;
   			pd[x1][y2+1][x1][y2]=1;
   			pd[x1][y2+1][x1][y1]=1;
   			pd[x1][y1][x1][y2+1]=1;
   		}
   		else
   		{
   			pd[x1][y1][x1][y1+1]=1;
   			pd[x1][y1+1][x1][y1]=1;
   			pd[x1][y1+1][x1][y2]=1;
   			pd[x1][y2][x1][y1+1]=1;
   		}
   	}
   	if(y1==y2)
   	{
   		if(x1<x2)
   		{
   			pd[x1][y1][x1+1][y1]=1;
   			pd[x1+1][y1][x1][y1]=1;
   			pd[x1+1][y1][x2][y1]=1;
   			pd[x2][y1][x1+1][y1]=1;
   		}
   		else
   		{
   			pd[x2][y1][x2+1][y1]=1;
   			pd[x2+1][y1][x2][y1]=1;
   			pd[x2+1][y1][x1][y1]=1;
   			pd[x1][y1][x2+1][y1]=1;
   		}
   	 }
   	 if(x1+y1-x2-y2==4)
   	 {
   	 	pd[x2+1][y2+1][x1][y1]=1;
   	 	pd[x1][y1][x2+1][y2+1]=1;
   	 	pd[x2+1][y2+1][x2][y2]=1;
   	 	pd[x2][y2][x2+1][y2+1]=1;
   	  }
   	  if(x2+y2-x1-y1==4)
   	  {
   	  	pd[x1+1][y1+1][x2][y2]=1;
   	  	pd[x2][y2][x1+1][y1+1]=1;
   	  	pd[x1+1][y1+1][x1][y1]=1;
   	  	pd[x1][y1][x1+1][y1+1]=1;
   	  }
   	  if(x1+y1==x2+y2)
   	  {
   	  	pd[x1][y1][(x1+x2)/2][(y1+y2)/2]=1;
   	  	pd[(x1+x2)/2][(y1+y2)/2][x1][y1]=1;
   	  	pd[x2][y2][(x1+x2)/2][(y1+y2)/2]=1;
   	  	pd[(x1+x2)/2][(y1+y2)/2][x2][y2]=1;
   	  }
   	  pd[x1][y1][x2][y2]=1;
   	  pd[x2][y2][x1][y1]=1;
   }
   for (int i = 0; i <= 18; i++) {
       for (int j = 0; j <= 18; j++) {
           for (int z = 0; z <= 18; z++) {
               for (int i1 = 0; i1 <= 18; i1++) {
                   for (int j1 = 0; j1 <= 18; j1++) {
                       for (int z1 = 0; z1 <= 18; z1++) {
                           if (pd[i][i1][j][j1] == 1 && pd[i][i1][z][z1] == 1 && !(i == j && i1 == j1) && !(i == z && i1 == z1) && (z1 - i1) * (j - i) - (j1 - i1) * (z - i) == 0 && pd[j][j1][z][z1] == 0 &&
                               pd[z][z1][j][j1] == 0) {
                               pd[j][j1][z][z1] = 1;
                               pd[z][z1][j][j1] = 1;
                           }
                       }
                   }
               }
           }
       }
   }
   for(int i=0;i<=18;i++)
   {
   	for(int j=0;j<=18;j++)
   	{
   		for(int k=0;k<=18;k++)
   		{
   			for(int i1=0;i1<=18;i1++)
   			{
   				for(int j1=0;j1<=18;j1++)
   				{
   					for(int k1=0;k1<=18;k1++)
   					{
   						if(pd[i][i1][j][j1]&&pd[j][j1][k][k1]&&pd[i][i1][k][k1]&&!(i1==j1&&i==j)&&!(i==k&&i1==k1)&&!(k==j&&k1==j1)&&((k1 - i1) * (j - i) - (j1 - i1) * (k - i) != 0))
   						{
   							ans++;
   						}
   					}
   				}
   			}
   		}
   	}
   }
   printf("%d",ans/6);
}
数三角count(归类)的更多相关文章
- hibernate 数据行数统计 count(*)
		Hibernate关于sql中的count(*)数据统计: ①如果使用的是HQL: 直接在HQL中使用count(*)即可获取行数 Long count = (Long)HibernateUtil.g ... 
- (转载)MySQL 统计数据行数 Select Count
		(转载)http://www.5idev.com/p-php_mysql_select_count.shtml 统计数据行数 SELECT COUNT() FROM 语法用于从数据表中统计数据行数. ... 
- MySQL 统计行数的 count
		MySQL count() 函数我们并不陌生,用来统计每张表的函数.但如果你的表越来越大,并且是 InnoDB 引擎的话,会发现计算的速度会越来越慢.在这篇文章里,会先介绍 count() 实现的原理 ... 
- sql-函数avg,count,max,min,sum
		常用函数 AVG (平均) COUNT (计数) MAX (最大值) MIN (最小值) SUM (总合) 运用函数的语法是: SELECT "函数名"("栏位名&qu ... 
- MySql中对Group by后的结果数进行Count
		今天在写MySQ的SQL语句的时候遇到了一个奇怪的问题 select count(*) from subsitealbum t1, photo t2,files t3 where t1.SourceA ... 
- oracle count 百万级 分页查询记要总数、总条数优化
		oracle count 百万级 分页查询记录总数.总条数优化 oracle count 百万级 查询记录总数.总条数优化 最近做一个项目时,做分页时,发现分页查询速度很慢,分页我做的是两次查询,一次 ... 
- 剑指Offer面试题:29.丑数
		一.题目:丑数 题目:我们把只包含因子2.3和5的数称作丑数(Ugly Number).求按从小到大的顺序的第1500个丑数.例如6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做第一个 ... 
- group by 查询分组后 组的条数
		比如select gid from table group by gid 查询时使用下面的方法查询条数 select count(distinct gid) from table 使用select c ... 
- entity framework 新手入门篇(3)-entity framework实现orderby,count,groupby,like,in,分页等
		前面我们已经学习了entityframework的基本的增删改查,今天,我们将在EF中实现一些更加贴近于实际功能的SQL方法. 承接上面的部分,我们有一个叫做House的数据库,其中包含house表和 ... 
随机推荐
- jquery datatable真实示例
			1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncodin ... 
- 【Service】【Database】【MySQL】基础概念
			1. 数据模型:层次模型.网状模型.关系模型 关系模型: 二维关系: 表:row, column 索引:index 视图:view 2. SQL接口:Structured Query Language ... 
- 注册页面html版本
			<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ... 
- 【Java】基本语法学习笔记
			1.数组 *数组的创建 int[] array = {1,2,3,4,5}; 注意区别于C++ int a[] = (1)两种输出方法 public class number { public sta ... 
- 图形学之Unity渲染管线流程
			Unity中的渲染管线流程 下图是<Unity Shader 入门精要>一书中的渲染流程图: ApplicationStage阶段:准备场景信息(视景体,摄像机参数).粗粒度剔除.定义每个 ... 
- 利用Windbg分析Magicodes.IE一次错误编写导致内存剧增
			由于这近一年时间一直忙于写书和工作,一直没有水文,但是近期有几位朋友使用我们的Magicodes.IE反馈在导出过程中内存暴涨...好吧,不管怎样,不能苦了我们朋友,接下来我们通过windbg来看一下 ... 
- 修复Apache Log4j任意代码执行漏洞安全风险通告
			2021年12月10日 0x01漏洞背景 Apache Log4j 是 Apache 的一个开源项目,Apache Log4j2是一个基于Java的日志记录工具.该工具重写了Log4j框架,并且引入了 ... 
- 车载以太网第二弹|测试之实锤-1000BASE-T1物理层PMA测试实践
			背景 100BASE-T1方兴未艾,国内外OEM量产车型纷至沓来:为了满足高带宽的应用场景需求(如图像.雷达等数据传输),1000BASE-T1将至已至,如大众MEB平台采用1000BASE-T1总线 ... 
- 【模型推理】量化实现分享一:详解 min-max 对称量化算法实现
			欢迎关注我的公众号 [极智视界],回复001获取Google编程规范 O_o >_< o_O O_o ~_~ o_O 大家好,我是极智视界,本文剖析一下 m ... 
- [V&N2020 公开赛]babybabypwn
			写在开头,感谢"影二つ"师傅的指点. 题目的做法思路网上一搜一大把,这篇博客主要记录一下这道题用pwntools写srop的时候,为什么需要省略前面8个字节. 在看题目之前,先来学 ... 
