[HNOI2005]数三角形

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 349  Solved: 234
[Submit][Status][Discuss]

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,表示有多少个三角形的边界都没有被删除。

Sample Input

5
1 1 1
1 1 0 1 1 0
1 1 1 1 1 1 1 0 1
1 0 1 1 1 1 0 1 1 1 1 1
0 1 1 1 1 1 0 1 1 1 1 1 0 1 1

Sample Output

19

HINT

 

Source

[HNOI2005]狡猾的商人

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 4405  Solved: 2160
[Submit][Status][Discuss]

Description

刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的。账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai(i=1,2,3...n-1,n), 。当 Ai大于0时表示这个月盈利Ai 元,当 Ai小于0时表示这个月亏损Ai 元。所谓一段时间内的总收入,就是这段时间内每个月的收入额的总和。 刁姹的任务是秘密进行的,为了调查商人的账本,她只好跑到商人那里打工。她趁商人不在时去偷看账本,可是她无法将账本偷出来,每次偷看账本时她都只能看某段时间内账本上记录的收入情况,并且她只能记住这段时间内的总收入。 现在,刁姹总共偷看了m次账本,当然也就记住了m段时间内的总收入,你的任务是根据记住的这些信息来判断账本是不是假的。

Input

第一行为一个正整数w,其中w < 100,表示有w组数据,即w个账本,需要你判断。每组数据的第一行为两个正整数n和m,其中n < 100,m < 1000,分别表示对应的账本记录了多少个月的收入情况以及偷看了多少次账本。接下来的m行表示刁姹偷看m次账本后记住的m条信息,每条信息占一行,有三个整数s,t和v,表示从第s个月到第t个月(包含第t个月)的总收入为v,这里假设s总是小于等于t。

Output

包含w行,每行是true或false,其中第i行为true当且仅当第i组数据,即第i个账本不是假的;第i行为false当且仅当第i组数据,即第i个账本是假的。

Sample Input

2
3 3
1 2 10
1 3 -5
3 3 -15
5 3
1 5 100
3 5 50
1 2 51

Sample Output

true
false
 
第一题的话,有一种神奇的暴力,就是维护每个点,向右上,右,右下,左下,四个方向的前缀和
然后枚举所有三角形,就过了。
第二题的话,权值并查集

向量减减加加的问题,如果和一直不符合,就不行。

 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=+;
struct line{
int d[N],n;
void add(int x,int v){
d[x]+=v;
}
void build(){
for(int i=;i<=n;i++)
d[i]+=d[i-];
}
bool check(int l,int r){
return d[r]-d[l-]==r-l+;
}
}d1[N],d2[N];
int c[N][N];
bool check1(int i,int l,int r){
int len=r-l+;
return d1[l].check(i-l+-len+,i-l+)&&d2[i-r+].check(r-len+,r);
}
bool check2(int i,int l,int r){
int len=r-l+;
return d2[i-l+].check(l,l+len-)&&d1[r+].check(i-r+,i-r++len-);
}
int main(){
//freopen("a.in","r",stdin);
int n;scanf("%d",&n);
int ans=;
for(int i=;i<=n;i++)d1[i].n=d2[i].n=n-i+;
for(int i=;i<=n;i++)
for(int j=;j<=i;j++){
int x,y,z;scanf("%d%d%d",&x,&y,&z);
if(x)d1[j].add(i-j+,);
if(y)d2[i-j+].add(j,);
c[i][j]=z;
}
for(int i=;i<=n;i++)
d1[i].build(),d2[i].build();
for(int i=;i<=n;i++){
int l=,r=;
for(int j=;j<=i;j++){
int z=c[i][j];
if(z)r++;
else l=j+,r=j;
for(int k=l;k<=r;k++){
ans+=check1(i,k,r);
if(r-k+<=n-i)
ans+=check2(i,k,r);
}
}
}
printf("%d\n",ans);
}
 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int father[],v[],flag,t;
int find(int x)
{
if(father[x]==x)return x;
t=find(father[x]);
v[x]+=v[father[x]];
father[x]=t;
return father[x];
}
void work(int x,int y,int w)
{
int p=find(x),q=find(y);
if(p!=q)
{
father[p]=q;
v[p]=v[y]-v[x]-w;
}
else if(v[y]-v[x]!=w)flag=;
}
int main()
{
int w,n,m;
scanf("%d",&w);
while(w--)
{
memset(v,,sizeof(v));
flag=;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)father[i]=i;
for(int i=;i<=m;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
work(x-,y,z);
}
if(flag)printf("false\n");
else printf("true\n");
}
return ;
}

bzoj 1201[HNOI2005]数三角形 1202 [HNOI2005]狡猾的商人 暴力 权值并查集的更多相关文章

  1. bzoj 1202 [HNOI2005]狡猾的商人——带偏移量的并查集

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1202 带偏移量的并查集. 注意先 find() 再调用 dis !!! 自己的对拍太水了. ...

  2. 1202. [HNOI2005]狡猾的商人【贪心 或 并查集】

    Description 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的.账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai(i=1,2,3...n-1,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. 在WPF中自定义控件(1)

    原文:在WPF中自定义控件(1)    在WPF中自定义控件(1):概述                                                   周银辉一, 不一定需要自定 ...

  2. 关于 js 对象 转 字符串 和 深拷贝 的探讨

    随着更多语言的支持 **json** 作为数据传输和存储的媒体,已经非常成熟且应用广泛.却存在致命硬伤,不携带 **对象方法** .在数据传输和存储中,这是恰当的和合理的. 但是在更多的应用场景中,又 ...

  3. 1754-I Hate It 线段树(单点替换,区间最值)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  4. 美年健康股票成交量和K线关系

    看下美年健康的股票,这次主要是研究下成交量和K线的关系,以最后5天为例子,股票下跌成交量降低,说明抛压很小,在最后3天,价格突破的时候,成交量是平时的两倍,说明有机构买入, 业绩部分还可以,全民健身是 ...

  5. UIButton内部子控件自定义布局-“UIEdgeInsets”

    UIButton UIButton做frame动画时,不响应点击 在一个View内部加入几个按钮,然后改变这个view的frame来做动画,但是按钮不响应点击事件. 问题代码 __block CGRe ...

  6. 阿里云ECS下基于Centos7.4安装MySQL5.7.20

     1.首先登录阿里云ECS服务器,如下图所示: 2.卸载MariaDB 说明:CentOS7.x默认安装MariaDB而不是MySQL,而且yum服务器上也移除了MySQL相关的软件包.因为Maria ...

  7. 孤荷凌寒自学python第七十五天开始写Python的第一个爬虫5

    孤荷凌寒自学python第七十五天开始写Python的第一个爬虫5 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 直接上代码.详细过程见文末屏幕录像 ...

  8. Linux 进程--父进程查询子进程的退出状态

    僵尸进程 当一个子进程先于父进程结束运行时,它与其父进程之间的关联还会保持到父进程也正常地结束运行,或者父进程调用了wait才告终止. 子进程退出时,内核将子进程置为僵尸状态,这个进程称为僵尸进程,它 ...

  9. [Effective Python] 用Pythonic方式来思考

    Effective Python chap.1 用Pythonic方式来思考 Pythonic: 一门语言的编程习惯是由用户来确立的. 1. 确认自己所使用的Python版本 2. 遵循PEP8风格指 ...

  10. anaconda常用的命令

    常用操作命令: 一.环境操作 1.查看环境管理的全部命令帮助: conda env -h 2.查看当前系统下的环境: conda info -e 3.创建环境: conda create env_na ...