题目传送门

BUREK

格式难调,题面就不放了。


  分析:

  一道比较有思维难度的模拟题。

  首先我们可以想到,对于一个三角形,可以画出一个最小矩形使得这个三角形被完全包围,并且这个矩形的边平行于坐标轴(图就不画了)。如果某条直线经过这个矩形内部,那么它就一定也会把这个三角形分割成两块。而要得到这个矩阵,只需要分别得到三角形三点中的最大与最小横纵坐标就行了,也就分别转化成了横纵向的若干区间。那么问题就转化为:平行于$x$轴的直线被包含于多少纵向区间,平行于$y$轴的直线被包含于多少横向区间内。

  那么这样问题就好办了,有多种解法可以做,这里博主用的是差分+前缀和的模拟方法,具体实现就看代码吧,非常好理解。

  Code:

//It is made by HolseLee on 23th Oct 2018
//Luogu.org P4623
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; const int N=2e5+;
int n,m,ans[N],tot,cntx,cnty;
struct Node {
int x,y,type;
Node() {}
Node(const int &_x,const int &_y,const int &_t):
x(_x), y(_y), type(_t) {}
}a[N];
struct Ques {
int p,id;
}X[N],Y[N]; inline int read()
{
char ch=getchar(); int num=; bool flag=false;
while( ch<'' || ch>'' ) {
if( ch=='-' ) flag=true; ch=getchar();
}
while( ch>='' && ch<='' ) {
num=num*+ch-''; ch=getchar();
}
return flag ? -num : num;
} inline bool cmp1(Node &a,Node &b) { return a.x<b.x; }
inline bool cmp2(Node &a,Node &b) { return a.y<b.y; }
inline bool cmp3(Ques &a,Ques &b) { return a.p<b.p; } int main()
{
freopen("burek.in","r",stdin);
freopen("burek.out","w",stdout);
n=read();
int mxx,mnx,mxy,mny,x1,x2,x3,y1,y2,y3;
for(int i=; i<=n; ++i) {
x1=read(), y1=read(), x2=read(), y2=read(), x3=read(), y3=read();
mxx=max(x1,max(x2,x3)); mnx=min(x1,min(x2,x3));
mxy=max(y1,max(y2,y3)); mny=min(y1,min(y2,y3));
a[++tot]=Node(mxx,mxy,-); a[++tot]=Node(mnx+,mny+,);
}
m=read(); char op[],ka[];
for(int i=; i<=m; ++i) {
scanf("%s%s",op,ka);
if( op[]=='x' ) {
X[++cntx].id=i, X[cntx].p=read();
} else {
Y[++cnty].id=i, Y[cnty].p=read();
}
}
int sum=, now=;
sort(a+,a+tot+,cmp1);
sort(X+,X+cntx+,cmp3);
for(int i=; i<=tot; ++i) {
while( now<=cntx && X[now].p<a[i].x ) {
ans[X[now].id]=sum; now++;
}
sum+=a[i].type;
}
sum=, now=;
sort(a+,a+tot+,cmp2);
sort(Y+,Y+cnty+,cmp3);
for(int i=; i<=tot; ++i) {
while( now<=cnty && Y[now].p<a[i].y ) {
ans[Y[now].id]=sum; now++;
}
sum+=a[i].type;
}
for(int i=; i<=m; ++i) printf("%d\n",ans[i]);
return ;
}

洛谷P4623 [COCI2012-2013#6] BUREK [模拟]的更多相关文章

  1. 洛谷 P3695 CYaRon!语 题解 【模拟】【字符串】

    大模拟好啊! 万一远古计算机让我写个解释器还真是得爆零了呢. 题目背景 「千歌です」(我是千歌).「曜です」(我是曜).「ルビィです」(我是露比).「3人合わせて.We are CYaRon! よろし ...

  2. 【题解】洛谷P1065 [NOIP2006TG] 作业调度方案(模拟+阅读理解)

    次元传送门:洛谷P1065 思路 简单讲一下用到的数组含义 work 第i个工件已经做了几道工序 num 第i个工序的安排顺序 finnish 第i个工件每道工序的结束时间 need 第i个工件第j道 ...

  3. 洛谷 P1598 垂直柱状图【字符串+模拟】

    P1598 垂直柱状图 题目描述 写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过72个字符),然后用柱状图输出每个字符在输入文件中出现的次数.严格地按照输出样例来安排你的输出格式. ...

  4. 洛谷 P1055 ISBN号码【字符串+模拟】

    P1055 ISBN号码 题目描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”就是分隔 ...

  5. 洛谷P1038 神经网络(bfs,模拟,拓扑)

    题目背景 人工神经网络(Artificial Neural NetworkArtificialNeuralNetwork)是一种新兴的具有自我学习能力的计算系统,在模式识别.函数逼近及贷款风险评估等诸 ...

  6. 洛谷 P1031 均分纸牌【交叉模拟】

    题目描述 有 N 堆纸牌,编号分别为 1,2,…, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 ...

  7. 洛谷 P1981 表达式求值(模拟)

    嗯... 题目链接:https://www.luogu.org/problem/P1981 这道题其实是数组模拟栈.首先处理乘法:注意从后往前处理,处理后归零.然后把数都加起来即可. AC代码: #i ...

  8. 洛谷P1086花生采摘(简单模拟)

    题目描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!――熊字”. 鲁宾逊先生和多多都很开心,因为花生正是他 ...

  9. 洛谷[Luogu] 普及村-简单的模拟总结

    题目列表 注明:Level值代表在本难度下的排行.(纯粹本蒟蒻主观评判)注明:Level值代表在本难度下的排行.(纯粹本蒟蒻主观评判)注明:Level值代表在本难度下的排行.(纯粹本蒟蒻主观评判) P ...

随机推荐

  1. crontab定时任务_net

    2017年2月25日, 星期六 crontab定时任务 19. crontab 定时任务 通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本.时间间隔 ...

  2. 24点扑克牌游戏——(含java源码)(GUI实现)

    给出四个数字,要求,在其间添加运算符和括号,使得计算结果等于24. 括号的放置即为决定哪几个数先进行计算.所以,我们先确定首先进行计算的两个相邻的数,计算完成后,就相当于剩下三个数字,仍需要在它们之间 ...

  3. GDB基本用法

    基本命令 进入GDB:#gdb test test是要调试的程序,由gcc test.c -g -o test生成.进入后提示符变为(gdb) . 查看源码:(gdb) l 源码会进行行号提示. 如果 ...

  4. 运用jQuery实现动态点赞

    写一个动态点赞的小案例吧! 虽然有点low,但是初学者可以看看! .Css文件 .content{ border: 1px solid black; font-size: 20px; height: ...

  5. Python练习-os模块练习-还算是那么回事儿

    # 编辑者:闫龙 # 小程序:根据用户输入选择可以完成以下功能: # 创建文件,如果路径不存在,创建文件夹后再创建文件 # 能够查看当前路径 # 在当前目录及其所有子目录下查找文件名包含指定字符串的文 ...

  6. JS设计模式——9.组合模式

    组合模式概述 组合模式是一种专为创建Web上的动态用户界面量身定制的模式.使用这种模式可以用一条命令在多个对象上激发复杂的递归的行为. 它可以用来把一批子对象组织成树形结构,并且使整棵树都可被遍历.所 ...

  7. Q - Phalanx

    题目链接:https://vjudge.net/contest/68966#problem/Q 分析:这里的对称并不是指的是关于原矩阵(也就是最大的那一个)主对角线对称,而是对于每一个小的矩阵来说,当 ...

  8. Go语言知识点笔记

    golang的花括号: 在go中,继承了C系的花括号作为一个作用域块的包含范围指示,但不同于C/C++中花括号位置可任意摆放,go要求“ { ”必须在右侧(一行代码尾部),不能单独另起一行.类似Pyt ...

  9. 推荐一本springBoot学习书籍---深入浅出springBoot2.x

    花了几周时间读完了这本书,确实是一本特别详细全面的书,而且不单单只是springBoot, 书中还介绍了许多工作中常用的技术与springBoot的整合使用,当然,也有一些小bug, 因为在代码实践过 ...

  10. bzoj 3236: 洛谷 P4396: [AHOI2013]作业 (莫队, 分块)

    题目传送门:洛谷P4396. 题意简述: 给定一个长度为\(n\)的数列.有\(m\)次询问,每次询问区间\([l,r]\)中数值在\([a,b]\)之间的数的个数,和数值在\([a,b]\)之间的不 ...