Codeforces Round #433 B. Jury Meeting

本文介绍了一个基于贪心算法解决特定问题的实现案例,通过记录员工入职与离职的时间点来优化公司的成本开销,展示了如何使用C++进行数据结构设计与算法优化。

贪心。



#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<ctime>
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<queue>
#include<utility>
#include<bitset>
#include<complex>
#include<map>
#include<set>
#include<unordered_map>
#include<unordered_set>

using namespace std;

#define mem(a,b) memset(a,b,sizeof(a))
#define REP(i,a,b) for(int i=a; i<=b; ++i)
#define FOR(i,a,b) for(int i=a; i<b; ++i)
#define MP make_pair
typedef long long LL;
typedef pair<int,int> pii;

const int maxn = 1e5;
const int maxd = 1e6;

struct Node {
    int day, val, wi;
    Node(): day(0), val(0), wi(0) {}
    Node(int _day, int _val, int _wi) {
        day = _day, val = _val, wi = _wi;
    }
    bool operator<(const Node &a) const {
        return day < a.day;
    }
};

int n, m, kk;
vector<Node> in, out;
LL f1[maxd + 5], f2[maxd + 5];
int dist[maxn + 5];

int main() {
    scanf("%d%d%d", &n, &m, &kk);
    for(int i = 1; i <= m; ++i) {
        int d, f, t, c;
        scanf("%d%d%d%d", &d, &f, &t, &c);
        if(t == 0)
            in.push_back( Node(d,f,c) );
        else out.push_back( Node(d,t,c) );
    }
    sort(in.begin(), in.end());
    sort(out.begin(), out.end());

    int cnt = n, pt = 0;
    LL sum = 0;
    for(int i = 1; i <= maxd; ++i) {
        while(pt < in.size() && in[pt].day <= i) {
            if(dist[in[pt].val] == 0) {
                --cnt;
                dist[in[pt].val] = in[pt].wi;
                sum += in[pt].wi;
            }
            else if(dist[in[pt].val] > in[pt].wi) {
                sum = sum - dist[in[pt].val] + in[pt].wi;
                dist[in[pt].val] = in[pt].wi;
            }
            ++pt;
        }
        if(cnt == 0) f1[i] = sum;
    }

    cnt = n, pt = out.size() - 1, sum = 0;
    mem(dist, 0);
    for(int i = maxd; i >= 1; --i) {
        while(pt >= 0 && out[pt].day >= i) {
            if(dist[out[pt].val] == 0) {
                --cnt;
                dist[out[pt].val] = out[pt].wi;
                sum += out[pt].wi;
            }
            else if(dist[out[pt].val] > out[pt].wi) {
                sum = sum - dist[out[pt].val] + out[pt].wi;
                dist[out[pt].val] = out[pt].wi;
            }
            --pt;
        }
        if(cnt == 0) f2[i] = sum;
    }

    LL ans = -1;
    for(int i = 1, k = 1 + kk + 1; k <= maxd; ++i, ++k) {
        if(f1[i] > 0 && f2[k] > 0) {
            if(ans == -1) ans = f1[i] + f2[k];
            else ans = min(ans, f1[i] + f2[k]);
        }
    }
    printf("%lld\n", ans);
    return 0;
}

我的代码:

        #include<bits/stdc++.h>
using namespace std;
#define sf scanf
#define pf printf
#define mem(a,b) memset(a,b,sizeof(a));
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define MP make_pair
#define ULL unsigned long long
#define LL   long long
#define inf 0x3f3f3f3f
#define md ((ll+rr)>>1)
#define ls (i<<1)
#define rs (ls|1)
#define eps 1e-8
#define ree freopen("in.txt","r",stdin);
#define bug pf("----------------");
#define N 1000010
#define mod 475
#define double long double
#define  pii pair<int,int>
#define MP make_pair
#define lson ll,md,ls
#define rson md+1,rr,rs
#define B 250
#define pii pair<int,int>
//2017年09月08日13:42:44


LL m1[N],m2[N];
int vis[N];
vector<pii>in[N],out[N];
int last[N];
int main(){
    //ree
    int n,m,k;
    sf("%d%d%d",&n,&m,&k);
    int ma=0;
    rep(i,1,m){
        int d,u,v,c;sf("%d%d%d%d",&d,&u,&v,&c);
        if(v==0)in[d].push_back(MP(u,c));
        else out[d].push_back(MP(v,c));
        ma=max(ma,d);
    }
    mem(m1,inf);mem(m2,inf);
    mem(vis,0);
    int cnt=n;
    //pf("%d\n",ma);
    LL tol=0;
    for(int i=1;i<=ma;++i){
        int len=in[i].size();
        for(int j=0;j<len;++j){
            int v=in[i][j].first;
            //pf("%d\n",v);
            if(!vis[v]){vis[v]=1;cnt--;tol+=in[i][j].second;last[v]=in[i][j].second;}
            else if(vis[v]&&last[v]>in[i][j].second){
                tol-=last[v];tol+=in[i][j].second;
                last[v]=in[i][j].second;
            }
        }
        if(cnt==0)m1[i]=tol;
    }
    cnt=n;mem(vis,0);tol=0; mem(last,0);
    for(int i=ma;i>=1;--i){
        int len=out[i].size();
        for(int j=0;j<len;++j){
            int v=out[i][j].first;
            //pf("%d\n",v);
            if(!vis[v]){vis[v]=1;cnt--,tol+=out[i][j].second;last[v]=out[i][j].second;}
            else if(vis[v]&&last[v]>out[i][j].second){
                tol-=last[v];tol+=out[i][j].second;
                last[v]=out[i][j].second;
            }
        }
        if(cnt==0)m2[i]=tol;
    }
    //rep(i,1,ma){
        //cout<<m1[i]<<' '<<m2[i]<<'\n';
    //}
    LL ans=100LL*inf;
    //cout<<ans<<'\n';
    for(int i=1;i+k+1<=ma;++i){
        ans=min(ans,1LL*m1[i]+1LL*m2[i+k+1]);
    }
    if(ans>=100LL*inf)puts("-1");
    else cout<<ans<<'\n';
}
胚胎实例分割数据集 一、基础信息 • 数据集名称:胚胎实例分割数据集 • 图片数量: 训练集:219张图片 验证集:49张图片 测试集:58张图片 总计:326张图片 • 训练集:219张图片 • 验证集:49张图片 • 测试集:58张图片 • 总计:326张图片 • 分类类别: 胚胎(embryo):表示生物胚胎结构,适用于发育生物学研究。 • 胚胎(embryo):表示生物胚胎结构,适用于发育生物学研究。 • 标注格式:YOLO格式,包含实例分割的多边形标注,适用于实例分割任务。 • 数据格式:图片来源于相关研究领域,格式为常见图像格式,细节清晰。 二、适用场景 • 胚胎发育AI分析系统:构建能够自动分割胚胎实例的AI模型,用于生物学研究中的形态变化追踪和量化分析。 • 医学与生物研究:在生殖医学、遗传学等领域,辅助研究人员进行胚胎结构识别、分割和发育阶段评估。 • 学术与创新研究:支持计算机视觉与生物医学的交叉学科研究,推动AI在胚胎学中的应用,助力高水平论文发表。 • 教育与实践培训:用于高校或研究机构的实验教学,帮助学生和从业者掌握实例分割技术及胚胎学知识。 三、数据集优势 • 精准与专业性:实例分割标注由领域专家完成,确保胚胎轮廓的精确性,提升模型训练的可靠性。 • 任务专用性:专注于胚胎实例分割,填补相关领域数据空白,适用于细粒度视觉分析。 • 格式兼容性:采用YOLO标注格式,易于集成到主流深度学习框架中,简化模型开发与部署流程。 • 科学价值突出:为胚胎发育研究、生命科学创新提供关键数据资源,促进AI在生物学中的实际应用。
物品实例分割数据集 一、基础信息 • 数据集名称:物品实例分割数据集 • 图片数量:训练集1441张、验证集167张、测试集172张,总计1780张图片 • 分类类别:物品(item) • 标注格式:YOLO格式,包含实例分割的多边形标注,适用于实例分割任务 • 数据格式:图片数据,来源于多样场景 二、适用场景 • 物品实例分割AI系统开发:支持构建能够自动识别并精确分割物品轮廓的AI模型,应用于自动化检测和识别系统。 • 物流与仓储管理:用于物品的分割和定位,提升库存管理、货物追踪和物流效率。 • 制造业质量检查:在制造过程中,对零件或产品进行实例分割,辅助质量评估和生产流程优化。 • 零售行业应用:集成至零售系统中,实现商品自动分割和识别,优化库存管理和用户体验。 • 学术研究与创新:支持计算机视觉领域的研究,特别是在实例分割任务上的模型开发和性能评估。 三、数据集优势 • 精准标注:每个物品实例均采用多边形标注,精确捕捉轮廓细节,确保分割准确性和可靠性。 • 数据多样性:数据集覆盖多种场景下的物品图片,增强模型在不同环境下的泛化能力和适应性。 • 任务专用:专注于实例分割任务,标注兼容YOLO等主流深度学习框架,便于模型训练和部署。 • 实用性强:适用于实际工业和应用场景,为物品分割相关AI开发提供高质量数据支撑,加速模型迭代。
一、基础信息 数据集名称:蜜蜂黄蜂人类蜂群关键点检测数据集 图片数量: 训练集:2265张图片 验证集:214张图片 测试集:108张图片 总计:2587张场景图片 分类类别: - Bee(蜜蜂):常见的传粉昆虫,在农业和生态系统中具有重要作用。 - Hornet(黄蜂):可能具有攻击性的昆虫,需监测以防范风险。 - Human(人类):场景中的人物,可用于行为分析或安全应用。 - Swarm(蜂群):指蜜蜂或黄蜂的群体,表示集体行为模式。 标注格式:YOLO格式,包含关键点坐标和类别标签,适用于关键点检测任务。 数据格式:JPEG图片,来源于实际场景,细节丰富。 二、适用场景 农业与环境监测系统开发:数据集支持关键点检测任务,帮助构建能够自动识别蜜蜂、黄蜂及蜂群关键点的AI模型,用于害虫控制、作物保护或生态平衡监测。 安全与监控应用:集成至智能监控系统,检测人类和昆虫活动,提供实时警报功能,适用于家庭、公共场所或工业区域的安全管理。 生态研究与行为分析:支持昆虫群体行为研究,通过关键点分析动态模式,助力生态学、昆虫学或生物多样性研究。 教育与实践培训:数据集可用于高校或培训机构,作为计算机视觉和昆虫识别课程的教学资源,提升学生实践能力。 三、数据集优势 多类别覆盖与精准标注:包含4个关键类别,每个类别均有关键点标注,确保模型学习准确的特征表示,提升检测精度。 数据多样性与真实性:图片来源于真实环境,覆盖不同场景和条件,增强模型的泛化能力和鲁棒性。 任务适配性强:标注兼容主流深度学习框架(如YOLO),直接适用于关键点检测任务,并可扩展至其他视觉应用。 应用价值突出:专注于实际需求如农业害虫管理和安全监控,为相关行业提供高效、可靠的数据支持,推动AI技术落地。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值