BZOJ 1201 [HNOI2005]数三角形:枚举 + 前缀和
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1201
题意:
有一个边长为n的正三角形网格,去掉其中一些线段,问你在这幅图中有多少个三角形。
题解:
枚举 + 前缀和。
三角形总共有两种:正着放的、倒着放的。
分别处理就好。
总复杂度 < O(N^3)
为了判断某一个三角形是否存在,需要迅速判断它的三边是否都是实线(不断开)。
所以建立三个前缀和,分别代表左、右、底边在对应方向上的边长和。
若某一边上的区间和[a,b] == b-a+1,则为实线。
如图为前缀和方向:

正着放的:
N^2枚举三角形最顶上的小三角形,再套一个for枚举向下延伸的边长k。

倒着放的:
倒三角形底部有一个小倒三角形,枚举它左边相邻的小正三角。

AC Code:
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 1005 using namespace std; int n;
int ans=;
int l[MAX_N][MAX_N];
int r[MAX_N][MAX_N];
int b[MAX_N][MAX_N];
int lef[MAX_N][MAX_N];
int rig[MAX_N][MAX_N];
int btm[MAX_N][MAX_N]; void read()
{
memset(l,,sizeof(l));
memset(r,,sizeof(r));
memset(b,,sizeof(b));
cin>>n;
for(int i=;i<=n;i++)
{
for(int j=;j<=i;j++)
{
cin>>l[i][j]>>r[i][j]>>b[i][j];
}
}
} void cal_sum()
{
memset(lef,,sizeof(lef));
memset(rig,,sizeof(rig));
memset(btm,,sizeof(btm));
for(int i=;i<=n;i++)
{
for(int j=;j<=i;j++)
{
lef[i][j]=lef[i-][j]+l[i][j];
rig[i][j]=rig[i-][j-]+r[i][j];
btm[i][j]=btm[i][j-]+b[i][j];
}
}
} void find_tri()
{
for(int i=;i<=n;i++)
{
for(int j=;j<=i;j++)
{
for(int k=;;k++)
{
if(lef[i+k-][j]-lef[i-][j]<k) break;
if(rig[i+k-][j+k-]-rig[i-][j-]<k) break;
if(btm[i+k-][j+k-]-btm[i+k-][j-]<k) continue;
ans++;
}
}
}
for(int i=;i<=n;i++)
{
for(int j=;j<i;j++)
{
for(int k=;i-k>= && j-k>=;k++)
{
if(lef[i][j+]-lef[i-k][j+]<k) break;
if(rig[i][j]-rig[i-k][j-k]<k) break;
if(btm[i-k][j]-btm[i-k][j-k]<k) continue;
ans++;
}
}
}
} void solve()
{
cal_sum();
find_tri();
} void print()
{
cout<<ans<<endl;
} int main()
{
read();
solve();
print();
}
BZOJ 1201 [HNOI2005]数三角形:枚举 + 前缀和的更多相关文章
- bzoj 1201[HNOI2005]数三角形 1202 [HNOI2005]狡猾的商人 暴力 权值并查集
[HNOI2005]数三角形 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 349 Solved: 234[Submit][Status][Disc ...
- 1201: [HNOI2005]数三角形 - BZOJ
Description Input 大三角形的所有短边可以看成由(n+1)*n/2个单位三角形的边界组成.如下图的灰色三角形所示.其中第1排有1个灰色三角形,第2排有2个灰色三角形,……,第n排有n个 ...
- 【BZOJ1201】[HNOI2005]数三角形(暴力)
[BZOJ1201][HNOI2005]数三角形(暴力) 题面 BZOJ 洛谷 题解 预处理每个点向四个方向可以拓展的最大长度,然后钦定一个点作为三角形的某个顶点,暴力枚举三角形长度,检查这样一个三角 ...
- BZOJ 3505: [Cqoi2014]数三角形 数学
3505: [Cqoi2014]数三角形 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...
- Bzoj 3505: [Cqoi2014]数三角形 数论
3505: [Cqoi2014]数三角形 Time Limits: 1000 ms Memory Limits: 524288 KB Detailed Limits Description
- bzoj 3505: [Cqoi2014]数三角形 组合数学
3505: [Cqoi2014]数三角形 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 478 Solved: 293[Submit][Status ...
- BZOJ 3505: [Cqoi2014]数三角形( 组合数 )
先n++, m++ 显然答案就是C(3, n*m) - m*C(3, n) - n*C(3, m) - cnt. 表示在全部点中选出3个的方案减去不合法的, 同一行/列的不合法方案很好求, 对角线的不 ...
- BZOJ 3505: [Cqoi2014]数三角形 [组合计数]
3505: [Cqoi2014]数三角形 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个. 注意三角形的三点不能共线. 1<=m,n<=1000 $n++ m++$ $ans ...
- BZOJ 3505 [Cqoi2014]数三角形
3505: [Cqoi2014]数三角形 Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形.注意三角形的三点不能共线. Input ...
随机推荐
- socket连接和TCP连接的关系
我们在数据传输时,能够仅仅使用(传输层)TCP/IP协议,可是那样的话,假设没有应用层.便无法识别数据内容,假设想要使传输的数据有意义.则必须使用到应用层协议,应用层协议有非常多,比方HTTP.FTP ...
- [Java开发之路](23)装箱与拆箱
1. 简单介绍 大家对基本数据类型都很熟悉.比如 int.float.double.boolean.char 等.基本数据类型是不具备对象的特性,比方基本类型不能调用方法.功能简单. ..,为了让基本 ...
- U盘EFI分区删不掉怎么办
方法/步骤 将U盘查到电脑上 点击[开始]找到并打开[Windows系统]的下拉按钮,找到[命令提示符] 在“命令提示符”上右键>[更多]>[以管理员身份运行]打开“管理员:命令提示符”窗 ...
- Struts2学习七----------Struts2后缀
© 版权声明:本文为博主原创文章,转载请注明出处 Struts2后缀 - Struts2默认后缀是action - Struts2使用默认后缀时*.action和*都是同一个请求 - Struts2自 ...
- linux SPI驱动——spidev之driver(六)
一: spidev_init注册spidev 1: static int __init spidev_init(void) 2: { 3: int status; 4: 5: /* Claim o ...
- Linux模块机制浅析_转
Linux模块机制浅析 转自:http://www.cnblogs.com/fanzhidongyzby/p/3730131.htmlLinux允许用户通过插入模块,实现干预内核的目的.一直以来,对l ...
- KVM+VNC 虚拟机远程管理
1.安装kvm grep -E -o 'vmx|svm' /proc/cpuinfo #检查服务器是否支持虚拟化(vmx为interl平台.svm是AMD平台) #安装KVM所需软件包: yum gr ...
- 【WPF学习笔记】之如何设置下拉框读取SqlServer数据库的值:动画系列之(一)
先前条件:设置好数据库,需要三个文件CommandInfo.cs.DbHelperSQL.cs.myHelper.cs,需要修改命名空间,参照之前随笔http://www.cnblogs.com/Ow ...
- 删除rabbitmq的队列和队列中的数据
访问http://{rabbitmq安装IP}:15672,帐号guest,密码guest(也可以使用自己创建的帐号). 登录后访问http://{rabbitmq安装IP}:15672/#/qu ...
- JavaScript -- JavaScript高级程序设计
/* 基本类型 Undefined, Null, Boolean, Number, String. 复杂类型 Object 它是所有对象的基础类型. 引用类型 Object 创建:new Ojbect ...