bzoj1201: [HNOI2005]数三角形
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]数三角形的更多相关文章
- BZOJ1201 [HNOI2005]数三角形 大力出奇迹
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1201 题意概括 题解 n3跑过去了,大力出奇迹!简单的,不多说了. 代码 #include < ...
- bzoj1201: [HNOI2005]数三角形----递推+bitset
-by bzoj http://www.lydsy.com/JudgeOnline/problem.php?id=1201 枚举所有交点,统计每个以每个点为顶点的正三角和和以每个点为左端点的反三角 ...
- 【BZOJ1201】[HNOI2005]数三角形(暴力)
[BZOJ1201][HNOI2005]数三角形(暴力) 题面 BZOJ 洛谷 题解 预处理每个点向四个方向可以拓展的最大长度,然后钦定一个点作为三角形的某个顶点,暴力枚举三角形长度,检查这样一个三角 ...
- 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个 ...
- BZOJ 1201 [HNOI2005]数三角形:枚举 + 前缀和
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1201 题意: 有一个边长为n的正三角形网格,去掉其中一些线段,问你在这幅图中有多少个三角形 ...
- 数三角形 bzoj 1201
数三角形(1s 128MB)triangle [题目描述] 小苏看到一个这样的等边三角形:该等边三角形每边的长度为n且被分成n等份,于是每条边就有n-1个等分点.而整个三角形被连接两个不同边的等分点且 ...
- [CQOI 2014] 数三角形 & 机械排序臂
数三角形 bzoj 3505 要知道一个公式就是(a,b)和(x,y)两点所成线段上面的整点数是gcd(a-x,b-y)-1,通过枚举原点到map上任意一点所能成的三角形,再平移,得到要去掉的三点共线 ...
- [Usaco2010 OPen]Triangle Counting 数三角形
[Usaco2010 OPen]Triangle Counting 数三角形 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 394 Solved: 1 ...
随机推荐
- for each 循环
前言 在C++中,经常用到类似 for (int i=0; i<n; i++); 这样的循环控制结构. 然而,如果要求循环变量的改变方式不是简单的+1递增,而是依次取某个数组里面的元素,那么C+ ...
- Codeforces Round #368 (Div. 2)A B C 水 图 数学
A. Brain's Photos time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- HDU-4455 Substrings(DP)
题目大意:给一个长度为n的整数序列,定义egg(i,j)表示区间[i,j]中不同的数的个数.q次询问,每次询问x,表示求所有长度为x连续区间的 egg 之和. 题目分析:定义dp(len)表示所有长度 ...
- Win10如何设置相关性
为什么要设置相关性? 有一些老的游戏或者程序,没有针对多核cpu进行优化,运行的时候会出现卡顿,这个时候需要通过相关性的设置,让程序只使用一个cpu核心. 怎么设置相关性? win10以前的系统直接打 ...
- (转)TensorFlow 入门
TensorFlow 入门 本文转自:http://www.jianshu.com/p/6766fbcd43b9 字数3303 阅读904 评论3 喜欢5 CS224d-Day 2: 在 Da ...
- C语言 文件读取
FILE *fp = fopen("data.txt","rt");fscanf(fp,"%d", &n ); /* 把数据放到数组 ...
- Python字典笔记
1.字典是Python中=唯一的映射类型.映射类型对象里哈希值(键,key)和只指向的对象(值,value)是一对多的关系,一个字典是可变的,是一个容器类型.字典类型和序列类型(元组,列表)的不同在于 ...
- SVG中的'defs' and 'use'-可复用的图元定义
在下一个示例中,我使用了defs中的元素之前,定义了如何去展现图元. <?xml version="1.0" standalone="no"?> & ...
- A javascript library providing cross-browser, cross-site messaging/method invocation. http://easyxdm.net
easyXDM - easy Cross-Domain Messaging easyXDM is a Javascript library that enables you as a develope ...
- IntelliJ IDEA中配置reportNG
找了好多资料,各种设置都是eclipse上面的.后来发现原来就在Run->Edit Configurations->TestNG->Configuration->Listenn ...