题意:给你一个n*m的的矩形框 现在又k条射线 问这个矩形框会被分为多少个区域

思路:之前的想法是枚举边界然后线段树扫一遍计算一下矩形个数 复杂度果断不行 后面发现其实答案就是交点数+1 然后就用线段树上下扫两边

#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const int N = 1e5+7;
const int inf = 0x3f3f3f3f;
typedef long long ll;
const ll mod = 1e7+9;
struct tree{int l,r,v;
};
tree t[N<<2];
struct node{int x,y,z;
}up[N],down[N];
int xx[N];
bool cmp1(node a,node b){return a.y<b.y; //升
}
bool cmp2(node a,node b){return a.y>b.y; //降
}
void build(int p,int l,int r){t[p].l=l; t[p].r=r; t[p].v=0;if(l==r){return ;}int mid=(l+r)>>1;build(p<<1,l,mid);build(p<<1|1,mid+1,r);t[p].v=t[p<<1].v+t[p<<1|1].v;}
void update(int p,int x,int v){if(t[p].l==t[p].r&&t[p].l==x){t[p].v+=v;return ;}int mid=(t[p].l+t[p].r)>>1;if(x<=mid) update(p<<1,x,v);else update(p<<1|1,x,v);t[p].v=t[p<<1].v+t[p<<1|1].v;
}
ll query(int p,int l,int r){if(l<=t[p].l&&t[p].r<=r){return t[p].v;}int mid=(t[p].l+t[p].r)>>1;ll res=0;if(l<=mid) res+=query(p<<1,l,r);if(r>mid) res+=query(p<<1|1,l,r);return res;
}
int getpo(int x,int n){int po=lower_bound(xx,xx+n,x)-xx+1;return po;
}
int main(){ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);int t; cin>>t;while(t--){int n,m,k; cin>>n>>m>>k;int cnt=0; int cntup=0; int cntdown=0;xx[cnt++]=1; xx[cnt++]=n-1;for(int i=1;i<=k;i++){int x,y; char ty;cin>>x>>y>>ty;xx[cnt++]=x;if(ty=='U'){up[cntup++]=node{x,y,1};}else if(ty=='D'){down[cntdown++]=node{x,y,1};}else if(ty=='L'){up[cntup++]=node{x,y,0};down[cntdown++]=node{x,y,0};}else{up[cntup++]=node{x,y,3};down[cntdown++]=node{x,y,3};}}sort(xx,xx+cnt);cnt=unique(xx,xx+cnt)-xx;sort(up,up+cntup,cmp1);sort(down,down+cntdown,cmp2);build(1,1,cnt);ll ans=1;for(int i=0;i<cntup;i++){if(up[i].z==1){int po=getpo(up[i].x,cnt);update(1,po,1);}else if(up[i].z==0){int l=getpo(1,cnt); int r=getpo(up[i].x,cnt);ans+=query(1,l,r);}else{int l=getpo(up[i].x,cnt); int r=getpo(n-1,cnt);ans+=query(1,l,r);}}build(1,1,cnt);for(int i=0;i<cntdown;i++){if(down[i].z==1){int po=getpo(down[i].x,cnt);update(1,po,1);}else if(down[i].z==0){int l=getpo(1,cnt); int r=getpo(down[i].x,cnt);ans+=query(1,l,r);}else{int l=getpo(down[i].x,cnt); int r=getpo(n-1,cnt);ans+=query(1,l,r);}}cout<<ans<<endl;}
}

转载于:https://www.cnblogs.com/wmj6/p/11385131.html

hdu 6681 Rikka with Cake(扫描线)相关推荐

  1. HDU - 6681 Rikka with Cake

    Rikka with Cake Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) P ...

  2. HDU 6681 Rikka with Cake(扫描线、动态开点线段树)

    http://acm.hdu.edu.cn/showproblem.php?pid=6681 题意 在矩形区域内有k条射线,问这些射线将矩形分成了多少区域 题解 容易发现答案为所有射线交点个数+1. ...

  3. hdu - 6681 Rikka with Cake 线段树

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6681 题意:给定一个左下顶点为,右上顶点为的矩形,然后给你k条射线,每条射线的起点及方向(上下左右)都 ...

  4. HDU 6681 Rikka with Cake (可持久化线段树)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=6681 题意:一个n*m的矩形蛋糕,每次给一个点(x, y)和方向dir确定一条切的线,问最后把蛋糕分成了几 ...

  5. Rikka with Cake 【多校9 HDU 6681】【欧拉定理+扫描线】

    题目链接 题目大意 有一个蛋糕是一个矩形,一个顶点在(0,0)另一个顶点在(n,m),现在对这个蛋糕进行切割,上下左右四个方向切,问最后这个蛋糕有多少块 解题思路 首先这个题的一个结论是:块数=交点数 ...

  6. HDU 6091 - Rikka with Match | 2017 Multi-University Training Contest 5

    思路来自 某FXXL 不过复杂度咋算的.. /* HDU 6091 - Rikka with Match [ 树形DP ] | 2017 Multi-University Training Conte ...

  7. hdu 4454 Stealing a Cake(三分之二)

    题目链接:hdu 4454 Stealing a Cake 题目大意:给定一个起始点s,一个圆形.一个矩形.如今从起点開始,移动到圆形再移动到矩形.求最短距离. 解题思路:在圆周上三分就可以.即对角度 ...

  8. hdu 6086 Rikka with String(AC自动机+状压dp)

    题目链接:hdu 6086 Rikka with String 题意: 给你n个只含01的串,和一个长度L,现在让你构造出满足s[i]≠s[|s|−i+1] for all i∈[1,|s|] ,长度 ...

  9. HDU - 6681

    题目链接: HDU - 6681 显然这是一个平面图,我们可以根据欧拉公式:V - E + F = 2假设射线之间交点个数为x,有n条线段.那么V = 4 + x + 2*n , E = 4 + 2* ...

最新文章

  1. socket与TcpListener/TcpClient/UdpClient 的区别及联系
  2. [译] Bounds Check Elimination 边界检查消除
  3. C++表白代码---一颗心
  4. java get提交中文乱码_java get方法提交中文乱码问题
  5. 5 万条微信语音升入太空;阿里京东否认停止社招;雷军开怼华为 | 极客头条...
  6. Python基础之初识类和对象
  7. Modern CMake 翻译 2.1 变量和缓存
  8. java new Date()得到的时间和系统时间不一样
  9. 北邮2017计算机考研题,北邮通信考研2017年801真题.pdf
  10. sangerbox制作heapmap_ArcMap制作土地利用转移矩阵——图文详解版.pdf
  11. 2019 deecamp B题不完全的记录
  12. 软件测试黑马程序员课后答案_(完整版)软件测试技术基础课后习题答案
  13. 车载智能导航系统有没有采用嵌入式计算机,嵌入式车载导航系统的应用与研究...
  14. 女孩子的试炼html5魔塔
  15. ASCII出错的原因
  16. editor.md中markdown编辑器的实现
  17. 网络打印服务器存打印文件,网络打印机文件打印顺序问题
  18. 使用QGIS制作点密度专题图
  19. 视频图像侦查的有效途径和方法
  20. DDD学习(一)——通用语言

热门文章

  1. 2020研电赛开始,Xilinx万元大奖等你来!看AI+MPsoc平台如何选?
  2. 夜光带你走走进全栈式web开发(12)擅长领域
  3. 四足机器人——机械结构
  4. html如何自动导入excel,Javascript 实现 Excel 导入生成图表功能
  5. css font-family的字体英文对照
  6. OSGi-Equinox
  7. MacKeeper负评这么多你还敢用吗
  8. 开源免费OA:O2OA中的日程安排功能是什么样的?
  9. oracle事务活动日志,关于Oracle事务日志的问题
  10. 2021年“金三银四”来袭!java修改json文件