题目链接: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]数三角形:枚举 + 前缀和的更多相关文章

  1. bzoj 1201[HNOI2005]数三角形 1202 [HNOI2005]狡猾的商人 暴力 权值并查集

    [HNOI2005]数三角形 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 349  Solved: 234[Submit][Status][Disc ...

  2. 1201: [HNOI2005]数三角形 - BZOJ

    Description Input 大三角形的所有短边可以看成由(n+1)*n/2个单位三角形的边界组成.如下图的灰色三角形所示.其中第1排有1个灰色三角形,第2排有2个灰色三角形,……,第n排有n个 ...

  3. 【BZOJ1201】[HNOI2005]数三角形(暴力)

    [BZOJ1201][HNOI2005]数三角形(暴力) 题面 BZOJ 洛谷 题解 预处理每个点向四个方向可以拓展的最大长度,然后钦定一个点作为三角形的某个顶点,暴力枚举三角形长度,检查这样一个三角 ...

  4. BZOJ 3505: [Cqoi2014]数三角形 数学

    3505: [Cqoi2014]数三角形 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...

  5. Bzoj 3505: [Cqoi2014]数三角形 数论

    3505: [Cqoi2014]数三角形 Time Limits: 1000 ms  Memory Limits: 524288 KB  Detailed Limits   Description

  6. bzoj 3505: [Cqoi2014]数三角形 组合数学

    3505: [Cqoi2014]数三角形 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 478  Solved: 293[Submit][Status ...

  7. BZOJ 3505: [Cqoi2014]数三角形( 组合数 )

    先n++, m++ 显然答案就是C(3, n*m) - m*C(3, n) - n*C(3, m) - cnt. 表示在全部点中选出3个的方案减去不合法的, 同一行/列的不合法方案很好求, 对角线的不 ...

  8. BZOJ 3505: [Cqoi2014]数三角形 [组合计数]

    3505: [Cqoi2014]数三角形 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个. 注意三角形的三点不能共线. 1<=m,n<=1000 $n++ m++$ $ans ...

  9. BZOJ 3505 [Cqoi2014]数三角形

    3505: [Cqoi2014]数三角形 Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形.注意三角形的三点不能共线. Input ...

随机推荐

  1. PHP 变量定义及使用

    php的变量前面必须有$符号,而且是解释型的弱类型语言,定义的时候不需要定义变量值的类型. $str="这是个变量"; 1.输出的时候可以用拼接字符串的方法 如:echo" ...

  2. 【Python】分析文本split()

    分析单个文本 split()方法,是以空格为分隔符将字符串拆分成多个部分,并将这些部分存储到一个列表中 title = 'My name is oliver!' list = title.split( ...

  3. Maven零散笔记——配置Nexus

    安装&配置Nexus 解压后,应该获得如下目录结构: nexus-2.0.6是nexus服务主目录 sonatype-work是真正的仓库,同时包含了nexus的配置,如定时任务.用户配置等 ...

  4. Android Activity间动画跳转

    本博文主要介绍activity间动画跳转的问题,在这里讲一下怎么设置全部activity的动画跳转和退出跳转.事实上有些软件已经这样做了.比方我们都比較熟悉的大众点评网. 以下我们通过一个实例来看一下 ...

  5. 在 Ubuntu16.04上安装并使用Docker

    介绍 Docker是一个开放源代码软件项目,让应用程序布署在软件容器下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制[1].Docker ...

  6. cmake学习之- set

    最后更新: 2019-06-06 一.简单介绍 set 和 unset 为一对相反的指令,分别为设置变量以及取消设置变量. 什么是变量? 变量就是用于保存值的存储单元. set 有哪几种? set 有 ...

  7. php正则表达式匹配img中任意属性的方法

    经常和图片打交道,不得不用到一些提取图片中scr.alt.title.等的属性,这里总结给大家一些常用的,感觉还不错,比较通用! PHP正则表达式匹配img中任意属性PHP 复制代码代码如下: < ...

  8. linux下安装rabbitmq的rpm包问题记录

    安装rabbitmq的文章和帖子多如牛毛,不管是官网还是各个博客,这里附个Rabbitmq官网安装Rpm包的链接, http://www.rabbitmq.com/install-rpm.html 不 ...

  9. java 常用设计模式(转载)

    http://www.cnblogs.com/hnrainll/archive/2011/12/29/2305582.html 设计模式:一个程序员对设计模式的理解:“不懂”为什么要把很简单的东西搞得 ...

  10. 【iOS开发-51】案例学习:动画新写法、删除子视图、视图顺序、延迟方法、button多功能使用方法及icon图标和启动页设置

    案例效果: (1)导入所需的素材,然后用storyboard把上半截位置和大小相对固定的东西布局起来.当然,这些控件也要定义成对应地IBOutlet和IBAction方便兴许使用它们. 注意:本案例在 ...