Description

Input

大三角形的所有短边可以看成由(n+1)*n/2个单位三角形的边界组成。如下图的灰色三角形所示。其中第1排有1个灰色三角形,第2排有2个灰色三角形,……,第n排有n个灰色三角形。所以输入格式是这样规定的:输入第一行为正整数n,其中1<=n<=1000,表示大三角形每边的长度。接下来的n行,第i+1行有i组数,从左到右每组数描述一个三角形,每组数都有3个数,这3个数非0即1,表示对应的短边是否被删除,0表示已被删除,1表示未被删除,依次按照三角形的左、右、下边的顺序来描述。所以第i+1行有3i个数,每个数是0或1

Output

仅包含一个整数T,表示有多少个三角形的边界都没有被删除。

预处理每个点向右上、左下、右、左四个方向延伸的最大长度,枚举左上-右下方向的路径,计算一边在这条路径上的三角形个数,可以排序并用树状数组维护

#include<cstdio>
#include<algorithm>
char buf[],*ptr=buf,*pmx=buf+;
inline int g(){
if(ptr==pmx)fread(ptr=buf,,,stdin);
return *(ptr++);
}
int _(){
int x=,c=g();
while(c<)c=g();
while(c>)x=x*+c-,c=g();
return x;
}
const int N=;
int n;
int d1[N][N],d2[N][N],d3[N][N],v1[N][N],v2[N][N],v3[N][N],v4[N][N],xs[N],xs2[N],bit[N],tk[N],T=,ans=;
struct itv{int l,r;}is[N],is2[N];
bool operator<(const itv&a,const itv&b){return a.l<b.l;}
void inc(int w){
for(++w;w<N;w+=w&-w){
if(tk[w]!=T)tk[w]=T,bit[w]=;
++bit[w];
}
}
int sum(int w){
int s=;
for(++w;w;w-=w&-w){
if(tk[w]!=T)tk[w]=T,bit[w]=;
s+=bit[w];
}
return s;
}
int main(){
n=_();
for(int i=;i<=n;++i){
for(int j=;j<=i;++j){
d1[i][j]=_();
d3[i][j]=_();
d2[i+][j]=_();
}
}
++n;
for(int i=;i<=n;++i){
for(int j=;j<=i;++j){
if(d2[i][j-])v2[i][j]=v2[i][j-]+;
if(d1[i-][j])v4[i][j]=v4[i-][j]+;
}
for(int j=i;j;--j)if(d2[i][j])v3[i][j]=v3[i][j+]+;
}
for(int i=n;i;--i){
for(int j=;j<=i;++j)if(d1[i][j])v1[i][j]=v1[i+][j]+;
}
for(int i=;i<=n;++i){
for(int x=i,y=,p;y<=n;){
while(!d3[x][y]&&y<=n)++x,++y;
if(y>n)break;
for(p=;;++x,++y,++p){
xs[p]=v1[x][y];
is[p]=(itv){p-v2[x][y],p};
xs2[p]=v3[x][y];
is2[p]=(itv){p-v4[x][y],p};
if(!d3[x][y])break;
}
std::sort(is+,is+p+);
++T;
for(int w=,r=;w<=p;++w){
while(r<=p&&is[r].l<=w)inc(is[r++].r);
ans+=sum(w+xs[w])-sum(w);
}
std::sort(is2+,is2+p+);
++T;
for(int w=,r=;w<=p;++w){
while(r<=p&&is2[r].l<=w)inc(is2[r++].r);
ans+=sum(w+xs2[w])-sum(w);
}
}
}
printf("%d",ans);
return ;
}

bzoj1201: [HNOI2005]数三角形的更多相关文章

  1. BZOJ1201 [HNOI2005]数三角形 大力出奇迹

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1201 题意概括 题解 n3跑过去了,大力出奇迹!简单的,不多说了. 代码 #include < ...

  2. bzoj1201: [HNOI2005]数三角形----递推+bitset

    -by  bzoj http://www.lydsy.com/JudgeOnline/problem.php?id=1201 枚举所有交点,统计每个以每个点为顶点的正三角和和以每个点为左端点的反三角 ...

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

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

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

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

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

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

  6. BZOJ 1201 [HNOI2005]数三角形:枚举 + 前缀和

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1201 题意: 有一个边长为n的正三角形网格,去掉其中一些线段,问你在这幅图中有多少个三角形 ...

  7. 数三角形 bzoj 1201

    数三角形(1s 128MB)triangle [题目描述] 小苏看到一个这样的等边三角形:该等边三角形每边的长度为n且被分成n等份,于是每条边就有n-1个等分点.而整个三角形被连接两个不同边的等分点且 ...

  8. [CQOI 2014] 数三角形 & 机械排序臂

    数三角形 bzoj 3505 要知道一个公式就是(a,b)和(x,y)两点所成线段上面的整点数是gcd(a-x,b-y)-1,通过枚举原点到map上任意一点所能成的三角形,再平移,得到要去掉的三点共线 ...

  9. [Usaco2010 OPen]Triangle Counting 数三角形

    [Usaco2010 OPen]Triangle Counting 数三角形 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 394  Solved: 1 ...

随机推荐

  1. sql server 内置ETL工具学习(一) BCP篇

    sql server 内置ETL工具学习 常用的导入方式:bcp, BULK INSERT,OPENROWSET和 SSIS. BCP BCP全称BULK COPY PROGRAM 有以下特点: 命令 ...

  2. pstack使用和原理

    前言: 最近小组在组织<<深入剖析Nginx>>的读书会, 里面作者提到了pstack这个工具. 之前写JAVA程序, 对jstack这个工具, 非常的喜欢, 觉得很有用. 于 ...

  3. linux 解压命令大全

    .tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) --------------- .gz 解压 ...

  4. java List 排序 Collections.sort()

    用Collections.sort方法对list排序有两种方法  第一种是list中的对象实现Comparable接口,如下: /** * 根据order对User排序 */ public class ...

  5. 铺地毯 2011年NOIP全国联赛提高组

    题目描述 Description 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有n 张地毯,编号从1 到n.现在将这些地毯按照编号从 ...

  6. 牧场安排(usaco NOV06.cowfood)

    ohn新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地.FJ打算在牧场上的某几格土地里种上美味的草,供他的奶 ...

  7. JavaScript验证

    <script type="text/javascript">    /*密码*/    function password()    {        var pas ...

  8. 简单工厂模式(Simple Factory Pattern)

    简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂 ...

  9. 账户切换[转自vbird]

    我们都是使用一般账号登陆系统的,等有需要进行系统维护或软件升级时才转为 root 的身份来动作. 那如何让一般使用者转变身份成为 root 呢?主要有两种方式喔: 以『 su - 』直接将身份变成 r ...

  10. 转(JSONP处理跨域事件)

     前言: 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Soc ...