hdu 4419 Colourful Rectangle(矩形面积并)

YOLOv8【第十章:多任务扩展深度篇·第19节】YOLOv8 与 DeepLabV3+ 对比——实时性与精度的权衡! 🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。 阅读详情


题意:给出红绿蓝三种颜色的矩形,某些元素重叠之后会组合成其它颜色,问7种颜色的面积分别为多少。


解法:考虑只有两种颜色AB,那么求A颜色矩形的面积并x,B颜色矩形的面积并为y,AB颜色矩形的面积并为z,则最终,AB颜色的面积为x+y-z,A颜色的面积为x-(x+y-z),B颜色的面积为y-(x+y-z);

类似得,考虑三种颜色:

根据公式先求出三种颜色混和的面积x,然后依次只考虑两种只有两种颜色,求出RG,RB,GB后减去x,分别得到两种颜色混合的面积,然后再求出只有一种颜色的面积。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<map>
using namespace std;
const int maxn = 20010;
int hash[maxn];
struct node {
    int left, right, key;
    long long sum;
    void init(int l, int r) {
        left = l;
        right = r;
        key=0;
        sum=0;
    }
    int mid() {
        return (left + right) >> 1;
    }
    int length() {
        return hash[right+1] - hash[left];
    }
};
struct SegTree {
    node tree[maxn * 4];
    void init(int l, int r, int idx) {
        tree[idx].init(l, r);
        if (l == r)
            return;
        int mid = tree[idx].mid();
        init(l, mid, idx << 1);
        init(mid + 1, r, (idx << 1) | 1);
    }
    void pushup(int idx) {
        if (tree[idx].key > 0)
            tree[idx].sum=tree[idx].length();
        else {
            if (tree[idx].left == tree[idx].right)
                tree[idx].sum = 0;
            else
                tree[idx].sum = tree[idx << 1].sum + tree[(idx << 1) | 1].sum;
        }
    }
    void update(int left, int right, int idx, int v) {
        if (tree[idx].left >= left && tree[idx].right <= right) {
            tree[idx].key += v;
            pushup(idx);
            return;
        }
        int mid = tree[idx].mid();
        if (left <= mid)
            update(left, right, idx << 1, v);
        if (right > mid)
            update(left, right, (idx << 1) | 1, v);
        pushup(idx);
    }
};
struct edge {
    int type, color;
    int s, t, x;
    void init(int c, int x, int s, int t, int type) {
        color = c;
        this->x = x;
        this->s = s;
        this->t = t;
        this->type = type;
    }
    bool operator <(const edge oth) const {
        return x < oth.x || (x == oth.x && type > oth.type);
    }
};
SegTree st;
edge ed[maxn];
map<int, int> mp;
int n, cnt;
void init() {
    mp.clear();
    int a, b, c, d, k;
    char ch[10];
    scanf("%d",&n);
    for (int i = 1; i <= n; i++) {
        scanf("%s%d%d%d%d", ch, &a, &b, &c, &d);
        if (ch[0] == 'R')
            k = 0;
        else if (ch[0] == 'G')
            k = 1;
        else
            k = 2;
        ed[i].init(k, a, b, d, 1);
        ed[n + i].init(k, c, b, d, -1);
        mp[b] = 0;
        mp[d] = 0;
    }
    sort(ed + 1, ed + n * 2 + 1);
    cnt = 0;
    for (map<int, int>::iterator it = mp.begin(); it != mp.end(); it++){
        (*it).second = ++cnt;
        hash[cnt]=(*it).first;
    }
}
bool flag[3];
void set(int a, int b, int c) {
    flag[0] = a;
    flag[1] = b;
    flag[2] = c;
}
long long get() {
    long long ans = 0;
    st.init(1, cnt - 1, 1);
    int i = 1;
    while (i<=2*n&&!flag[ed[i].color])
        i++;
    if(i>2*n)
        return 0;
    st.update(mp[ed[i].s], mp[ed[i].t] - 1, 1, ed[i].type);
    int pre=ed[i].x;
    i++;
    for (; i <= n * 2; i++) {
        if (!flag[ed[i].color])
            continue;
        ans += st.tree[1].sum * (ed[i].x - pre);
        pre=ed[i].x;
        st.update(mp[ed[i].s], mp[ed[i].t] - 1, 1, ed[i].type);
    }
    return ans;
}
long long ans[10];//R G B RG RB GB RGB
void work() {
    set(1, 0, 0);
    ans[1] = get();//R
    set(0, 1, 0);
    ans[2] = get();//G
    set(0, 0, 1);
    ans[3] = get();//B
    set(1, 1, 1);
    long long all = get();
    set(1, 1, 0);
    long long ab = ans[1] + ans[2] - get();
    set(1, 0, 1);
    long long ac = ans[1] + ans[3] - get();
    set(0, 1, 1);
    long long bc = ans[3] + ans[2] - get();
    ans[7]=all-ans[1]-ans[2]-ans[3]+ab+ac+bc;
    ans[4]=ab-ans[7];
    ans[5]=ac-ans[7];
    ans[6]=bc-ans[7];
    ans[1]=ans[1]-ans[4]-ans[5]-ans[7];
    ans[2]=ans[2]-ans[4]-ans[6]-ans[7];
    ans[3]=ans[3]-ans[5]-ans[6]-ans[7];
}
int main() {
    int cas;
    scanf("%d",&cas);
    for(int c=1;c<=cas;c++){
        init();
        work();
        printf("Case %d:\n",c);
        for(int i=1;i<=7;i++)
            printf("%I64d\n",ans[i]);
    }
    return 0;
}


Python爬虫实战:利用Selenium与异步技术高效获取雪球财经数据 雪球财经作为国内领先的投资社交平台,汇聚了大量股票数据、财经资讯和投资者观点。对于金融数据分析师、量化投资者和研究人员来说,获取雪球平台的实时数据具有重要价值。然而,雪球网站采用了多种反爬虫机制,包括动态内容加载、请求频率限制和用户行为检测等,使得传统爬虫技术难以有效获取数据。本文将介绍如何使用Python的最新爬虫技术,包括Selenium WebDriver、异步请求处理和智能等待策略,来高效、稳定地爬取雪球财经数据。我们将重点解决以下几个技术难点:动态加载内容的处理登录状态维持与模拟。 阅读详情

相关推荐

ReAct 智能体 Agent:架构解析与实践拓展

ReAct 智能体 Agent 凭借其推理与行动协同的独特架构,在众多人工智能应用场景中展现出巨大的潜力。从智能办公到教育辅导,从智能家居到工业物联网,ReAct 智能体通过精准推理和高效行动,为用户提供了更加智能、便捷的服务体验。然而,在实际应用过程中,仍面临工具调用安全、模型持续学习、多智能体协作管理以及性能优化等多方面的挑战。通过合理的策略和技术创新,如强化工具审核机制、构建持续学习框架、设计高效协作协议和采用性能优化手段,我们有望逐步克服这些挑战,进一步提升 ReAct 智能体的性能和可靠性。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1657

HDU4419 Colourful Rectangle(矩形面积+线段树)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4419 解析:跟一般矩形面积有一点的区别,就是每条线的状态要用一个数组来维护,这里的depth[ i ] 表示当前状态第i中颜色的已覆盖的长度,三种基本颜色可以分别用1,2,4表示,然后通过二进制运算得到其他颜色的标号,其他也没什么了。 参考代码: #include #include #incl

fire__ice的专栏 893

YOLOv11【第一章:零基础入门篇·第10节】YOLOv11项目实战:从零搭建检测系统!

🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。

**My Coding Family** 5735

HDU-4419 Colourful Rectangle 矩形面积

  题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4419   利用二进制,R为1、G为2、B为4,然后通过异或运算可以得到其它组合颜色。建立7颗线段树,每颗线段树保存每种颜色的长度。。。 1 //STATUS:C++_AC_203MS_4780KB 2 #include <functional> 3 #inclu...

weixin_30730151的博客 118

HDU4419 Colourful Rectangle】 线段树面积

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4419 题目大意:给你n个矩形,每个矩形都有一种颜色,矩形覆盖会出现另外一种颜色,问你所有矩形中不同的颜色各出现的面积。 解题思路:开始一直只用一个标记,1,2,4,处理来处理去发现一直搞不来。最后用两个标记,一个存+1,-1,和普通面积类似,另外开一个三位的标记数组,0位表...

baidui8622的博客 172

hdu 4419 Colourful Rectangle(扫描线)

题意:给你10000个三种颜色的矩形,不同颜色的矩形相互覆盖会形成不同的颜色,问形成的七种颜色的面积是多少。 扫描线。线段树的每个节点里维护好七种颜色的长度。直接暴力跑一次即可。 #include #include #include #include #include #include using namespace std; #define LL(x) (x<<

3111

hdu 4419 Colourful Rectangle 杭州赛区 1010 (解题报告)

杭州赛区最后一题。。。。 最近看线段树还是有收获的·~~~ #include #include #include #include #define ls rt<<1 #define rs rt<<1|1 #define lson l,m,ls #define rson m+1,r,rs #define sf scanf #define pf printf using

CSUST_ACM的专栏 2114

HDU - 4419 Colourful Rectangle【扫描线】

Colourful Rectangle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1902    Accepted Submission(s): 792   Problem Description We use Red, Gr...

微微风簇浪,散作满河星 639

hdu 4419 Colourful Rectangle

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4419 题目大意:      给定n个矩形,矩形的长平行于x轴,宽平行于y轴,每个矩形的颜色可能是R,G或B,矩形可能重叠,如果R和G(或G,R)重叠变为RG,如果三色重叠就是RGB,求所有颜色块(R,G,B,RG,RB,GB,RGB)面积. 题目思路:      很容易想到扫

Go.To.AC的专栏 645

HDU 4419 Colourful Rectangle(线段树)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4419 题意:给出平面上一些矩形,这些矩形的颜色有三种R、G、B。相交的区域分别标记为 RG, RB, GB, RGB。输出颜色为R, G, B, RG, RB, GB, RGB的面积各为多少? 思路:设上面7种颜色的面积分别为1,2,3,4,5,6,7: a=1+2+3+4+5+6+7(把所有的...

weixin_34061042的博客 131

Hdu 4419 Colourful Rectangle(矩形颜色交)

传送门:Hdu 4419 Colourful Rectangle 题意:给你10000个三种颜色的矩形,不同颜色的矩形相互覆盖会形成不同的颜色,问形成的七种颜色的面积是多少。 思路:很显然,一种颜色的时候是很容易解决的(面积) 两种颜色或以上的时候,我们可以在线段树的每个节点开三个标记(表示对应区间的某一种颜色是否出现) 利用二进制状态维护线段树中的面积交 后面利用容斥减

_zidaoziyan的博客 576

HDU - 4419 Colourful Rectangle【扫描线.笔记】

题目链接:http://acm.hdu.edu.cn/viewcode.php?rid=32159923 题目大意:有n个矩形块,这些矩形块有R, G, B三种不同的颜色,最终区域的颜色由该区域上颜色的种类决定,要求输出 R, G, B, RG, RB, GB, RGB七种颜色的面积是多少。 思路:在前面区域覆盖面积的例题里,我们用一维数组维护被覆盖的区间长度,因为这里有颜色之分,所以可以再开一维...

qq_43803508的博客 300

HDU 4419 Colourful Rectangle (线段树扫描线)

题意: 给出R,G,B三种颜色的矩形的数据,求最后7种颜色(R,G,B,RG,RB,GB,RGB)面积是多少? 分析: 显然的线段树扫描线,可以说这题非常考验对线段树扫描线的理解,如果只会用模板,恐怕很难做出来。 R,G,B三种颜色最后会产生7种颜色(无色不算),可以预见本题对编码质量要求相当之高。 update()操作和一般的线段树扫描线无太大的不同,本题的精髓在于query()! 一般的简单扫描线甚至不用写query,因为根结点维护的区间覆盖长度就是我们所需要的。但是本题需要从复杂的信息中分出7种信

fcbruce 2034

HUD-4419 Colourful Rectangle 线段树+扫描线+离散

题目:http://acm.hdu.edu.cn/showproblem.php?pid=4419         题意:分别用R,G,B三种颜色覆盖一平面区域,不同的颜色重合会产生不同的颜色:RG,RB,BG,RGB,求最后每种颜色的面积。         矩形面积,扫描线的加强版。线段树记录分别7重颜色的的长度,然后记录每种颜色覆盖的次数。   My code://STATUS:C++

岁月流风、、 1009

HDU 4419 Colourful Rectangle

分别求出7种矩形面积(离散化+扫描线+线段树),再根据容斥关系计算所求颜色面积。 //2012-09-24 20:30:42 Accepted 4419 359MS 4740K 2707 B G++ Aros #include #include #include #include using namespace std; const int MAXN = 10000+5, MAXM = 20

Fatal Fake Field 541

HDU 4419 Colourful Rectangle(12年杭州 线段树+离散化+扫描线)

转载请注明出处,谢谢http://blog.csdn.net/acm_cxlove/article/details/7854526       by---cxlove  题目:给出3种颜色,重叠会生成新的颜色,然后有一些矩形,求出每种颜色的面积 http://acm.hdu.edu.cn/showproblem.php?pid=4419  很明显的矩形面积,线段树+离散化+扫描线,

窝不是爱酱,喵~~~~ 2430

hdu4419Colourful Rectangle(线段树+离散化+扫描线)

->题目请戳这里 题目大意:在二维平面内给n个矩形矩形有3种颜色,不同颜色相交的部分就产生了不同的颜色,一共就有7种颜色。对于每个区域内的颜色与某中颜色覆盖的次数无关,只与覆盖的颜色种类有关,求最后这n个矩形相交产生7种颜色的面积。 题目分析:这题和这道hdu1255思路基本是一样的,不过1255求的是重复覆盖2+次面积,情况简单些,这里3种颜色一交就会产生7种情况,分析就稍微复杂一点点。

ophunter的专栏 1002

hdu 4419 Colourful Rectangle (离散化扫描线线段树)

Problem - 4419   题意不难,红绿蓝三种颜色覆盖在平面上,不同颜色的区域相交会产生新的颜色,求每一种颜色的面积大小。   比较明显,这题要从矩形面积的方向出发。如果做过矩形面积的题,用线段树做的,这题就只差一个把每个区域计算单独出来的思路了。   这里不详细介绍扫描线,只是说一下针对这题的做法。其实网上有好多版本,都是直接单独计算答案的。然而,我稍微绕了个小弯,我觉得我这种...

weixin_30780221的博客 75

HDU4419-Colourful Rectangle解题报告

又一道矩形面积,只要要统计七种颜色分别的面积,所以在线段树里维护一个颜色数组,一个各种颜色覆盖长度的数组,其余的和求矩形面积就很类似了 View Code 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<algorit...

weixin_30326515的博客 100

Hdu 4419 Colourful Rectangle(线段树扫描线)

题目大意: 给出多个不同颜色的矩形,求最后覆盖的颜色的面积。 思路分析: 我是自己手动暴力枚举。 比赛的时候漏了一种情况。 RGB 可以从 RG+RB组合来(只是举例,就是说可以从两种颜色组合而来)。 然后就只需要维护所有的颜色 用扫描线来判断。 #include #include #include #include #define MAXN 42222 u

Jinx Jinx again 1175

HDU 4419 Colorful Rectangle 线段树 扫描线 矩形面积 容斥原理

题目链接 感谢YB,CQ。 用线段树算出7种不同颜色的矩形面积集,然后容斥原理分别算出每块单独颜色的面积。 这里的线段树写法比较特殊,只需要修改操作,查询的结果在1那个节点那里,重点是pushUp,因为这里扫描线求矩形面积是一种特殊区间修改(保证随时都大于0,相同区间至少会有2个,一个下边,一个上边,所以可以不用像一般的区间修改线段树一样带Lazy标记的同时需要pushDown),标记当...

weixin_30823833的博客 139

HDU 4419 Colourful Rectangle 线段树求矩阵的升级版again

题意:有R G B三种颜色的矩形在一起,两两颜色和三种颜色一起可以搞出另外4中颜色,问最终所有7种面积和为多少。 题解:y轴离散化,x轴扫描,线段树区间维护7种颜色的有效长度。具体来说:首先不考虑区间的lazy,求出区间7种颜色有效长度,然后考虑lazy,          拿区间 R lazy举例,R 可以把无色染成R ,G染成RG,B染成RB,GB染成RGB,B G lazy做做相同转化

Uhh, call me zacky NOW!!! 849
上一篇: hdu 4411 Arrest(费用流)
下一篇: Fibonacci数列
kksleric
博客等级 码龄16年 49粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值