Codeforces Round #433 题解

Codeforces Round #433 Jury Meeting D. Jury Meeting题目链接 题意是给有n个地点,m次航班,每次航班有4个信息,起飞日期di、出发地fi、目的地ti、花费ci,起飞和出发地至少有一个是地点0。现在n个地点,每个地点有一个人,他们要到地点0,当所有人都到达的时候,一起待k天,然后再分别回到n个地点。问说最小的花费是多少,如果达不到这个要求输出-1。我们考虑从前往后对日期做一个dp,维护dp[i]第i天到达0点的最小花费, 阅读详情

比赛链接:http://codeforces.com/contest/854

A. Fraction

解法:按照题意模拟即可。

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n;
    cin >> n;
    for(int i=n/2; i>=1; i--){
        if(__gcd(i, n-i) == 1){
            printf("%d %d\n", i,n-i);
            return 0;
        }
    }
    return 0;
}

B. Maxim Buys an Apartment

题意:有n个屋子,其中k个屋子是有人住的,如果第i个屋子有人住,那么第i-1个屋子和第i+1个屋子就是特殊的,方便起见这里我们将特殊屋子的数量记为ans。然后给你n和k,让你输出最小的ans和最大的ans。

解法:如果k和n一样多或者是k为0显然输出0 0,然后就是贪心了,除去特殊情况后,最小全都是1,那么剩下的就是最大值了,当k≤n3时,最大值就是k×2,当k>n3时,最大值就是n−k,化简一下发现可以直接取min(n−k,k×2)。

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n, k, mx, mi;
    cin >> n >> k;
    if(k == 0 || k == n){
        printf("0 0\n");
        return 0;
    }
    else{
        mi = 1;
        mx = min(n-k, k*2);
    }
    cout << mi << " " << mx << endl;
    return 0;
}
C. Planning

题意:n个人 分成两派, 问最后那一派获得胜利, 规则是这样的, 首先从1遍历到n 如果出现D, 那么他可以什么都不做, 也可以让某一个R退出比赛, 一轮过后假设还剩k个人 , 继续从1遍历到k.

解法:很显然要采取贪心的策略, 如果是D那么他肯定会使他右边离他最近的R推出比赛, 这样才能达到最策略, 右边没有了 则从最左边开始取.直接模拟了

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
priority_queue <pair<int, int> > q;
int res[300005];
int main()
{
    int n, k;
    cin >> n >> k;
    for(int i=1; i<=k; i++){
        int x;
        scanf("%d", &x);
        q.push(make_pair(x, i));
    }
    LL ans = 0;
    for(int i=k+1; i<=n+k; i++){
        if(i<=n){
            int x;
            scanf("%d", &x);
            q.push(make_pair(x,i));
        }
        pair <int,int> a = q.top();
        q.pop();
        ans += 1LL*(i-a.second)*a.first;
        res[a.second] = i;
    }
    cout << ans << endl;
    for(int i=1; i<=n; i++) cout << res[i] << " ";
    cout << endl;
    return 0;
}
D. Jury Meeting
题意:有n个地点,m次航班,每次航班有4个信息,起飞日期di、出发地fi、目的地ti、花费ci,起飞和出发地至少有一个是地点0。现在n个地点,每个地点有一个人,他们要到地点0,当所有人都到达的时候,一起待k天,然后再分别回到n个地点。问说最小的花费是多少,如果达不到这个要求输出-1。
解法:我们可以使用 dp 两个方向进行dp1[i] 表示当 i 时间是从 所有点出发到 0 点的最小花费 ,dp2[i] 表示 i 时间时从 0点到 所有点 的花费最小值  这样我们就可以dp了 然后就是如果不能到 所有点我们就不更新如果可以到所有点我们就进行更新dp的最小值 过程中保留一个 sum 记录最小花费即可。

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 1e6+7;
struct node{
    int from, to, cost;
    node(){}
    node(int from, int to, int cost):from(from),to(to),cost(cost){}
};
vector <node> v[maxn];
int n, m, k;
LL dp1[maxn], dp2[maxn];//dp1[i]表示当i时间是从所有点出发到0的最小花费,dp2[i]表示当i时间是从0出发到所有点的最小花费
LL mi1[maxn], mi2[maxn];
bool vis[maxn];
LL min(LL x, LL y){
    if(x == -1) return y;
    if(y == -1) return x;
    if(x > y) return y;
    else return x;
}
int main()
{
    scanf("%d %d %d", &n,&m,&k);
    memset(dp1, -1, sizeof(dp1));
    memset(dp2, -1, sizeof(dp2));
    for(int i=0; i<m; i++){
        int t, x, y, z;
        scanf("%d %d %d %d", &t,&x,&y,&z);
        v[t].push_back(node(x,y,z));
    }
    memset(vis, 0, sizeof(vis));
    LL sum = 0;
    int cnt = 0;
    for(int i=1; i<maxn; i++){
        for(int j=0; j<v[i].size(); j++){
            node x = v[i][j];
            if(x.from){
                if(!vis[x.from]){
                    vis[x.from] = 1;
                    mi1[x.from] = x.cost;
                    cnt++;
                    sum += x.cost;
                }
                else{
                    if(mi1[x.from] > x.cost){
                        sum -= mi1[x.from];
                        mi1[x.from] = x.cost;
                        sum += x.cost;
                    }
                }
            }
        }
        if(cnt == n) dp1[i] = min(dp1[i], sum);
    }
    //
    memset(vis, 0, sizeof(vis));
    sum = 0;
    cnt = 0;
    for(int i=maxn-1; i>0; i--){
        for(int j=0; j<v[i].size(); j++){
            node x = v[i][j];
            if(x.to){
                if(!vis[x.to]){
                    vis[x.to] = 1;
                    mi2[x.to] = x.cost;
                    cnt++;
                    sum += x.cost;
                }
                else{
                    if(mi2[x.to] > x.cost){
                        sum -= mi2[x.to];
                        mi2[x.to] = x.cost;
                        sum += x.cost;
                    }
                }
            }
        }
        if(cnt == n){
            dp2[i] = min(dp2[i], sum);
        }
    }
    //
    LL ans = -1;
    for(int i=1; i<maxn; i++){
        int j = i+k+1;
        if(j >= maxn) continue;
        if(dp1[i]!=-1 && dp2[j]!=-1){
            ans = min(ans, dp1[i]+dp2[j]);
        }
    }
    printf("%lld\n", ans);
    return 0;
}
E. Boredom

解法:查二维平面里有多少点,按行维护主席树,然后每次查一个区间,做差就可以求出二维平面里的点了,然后剩下的容斥一哈就行了,具体是把周围一圈剪掉,然后把四个角加上就好了,这就是个简单容斥。


#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5+5;
const int maxm = maxn*40;
typedef long long LL;
int n, q, tot, a[maxn];
int T[maxn], lson[maxm], rson[maxm], c[maxm];
int build(int l, int r){
    int root = tot++;
    c[root] = 0;
    if(l != r){
        int mid=(l+r)/2;
        lson[root] = build(l, mid);
        rson[root] = build(mid+1, r);
    }
    return root;
}
int update(int root, int pos, int val){
    int newroot = tot++, tmp = newroot;
    c[newroot] = c[root]+val;
    int l=1, r=n;
    while(l<r){
        int mid=(l+r)/2;
        if(pos<=mid){
            lson[newroot] = tot++;
            rson[newroot] = rson[root];
            newroot = lson[newroot];
            root = lson[root];
            r = mid;
        }
        else{
            rson[newroot]= tot++;
            lson[newroot] = lson[root];
            newroot = rson[newroot];
            root = rson[root];
            l = mid+1;
        }
        c[newroot] = c[root]+val;
    }
    return tmp;
}
int query(int root, int L, int R, int l, int r){
    if(L > R) return 0;
    if(L <= l && r <= R) return c[root];
    int mid = (l+r)/2;
    int ret = 0;
    if(L <= mid) ret += query(lson[root], L, R, l, mid);
    if(mid < R) ret += query(rson[root], L, R, mid+1, r);
    return ret;
}
int query2(int l, int r, int L, int R){
    if(l>r) return 0;
    return query(T[r],L,R,1,n)-query(T[l-1],L,R,1,n);
}
LL cal(LL x){
    return x*(x-1)/2;
}
int main()
{
    tot = 0;
    scanf("%d %d", &n,&q);
    T[0] = build(1, n);
    for(int i=1; i<=n; i++){
        scanf("%d", &a[i]);
        T[i] = update(T[i-1], a[i], 1);
    }
    while(q--){
        int l, r, d, u;
        LL cnt = 0, ans = 0;
        scanf("%d %d %d %d", &l,&r,&d,&u);
        cnt = query2(1, l-1, 1, n);
        ans -= cal(cnt);
        cnt = query2(d+1, n, 1, n);
        ans -= cal(cnt);
        cnt = query2(1, n, 1, r-1);
        ans -= cal(cnt);
        cnt = query2(1, n, u+1, n);
        ans -= cal(cnt);
        cnt = query2(1, l-1, 1, r-1);
        ans += cal(cnt);
        cnt = query2(1, l-1, u+1, n);
        ans += cal(cnt);
        cnt = query2(d+1, n, 1, r-1);
        ans += cal(cnt);
        cnt = query2(d+1, n, u+1, n);
        ans += cal(cnt);
        cnt = cal(n);
        ans += cnt;
        printf("%lld\n", ans);
    }
    return 0;
}




macOS Monterey官方镜像高速下载指南(附迅雷链接+兼容性清单) 本文提供macOS Monterey官方镜像的高速下载指南,重点介绍利用迅雷等工具加速下载官方安装包的有效方法。同时,详细列出了系统兼容性清单,帮助用户在下载前确认设备支持,并分享了从下载、验证到安全安装的完整流程与常见问题解决方案。 阅读详情

相关推荐

硬件原理图:从软件思维到硬件接口的嵌入式开发破局指南

本文为软件开发者提供了读懂硬件原理图的嵌入式开发破局指南。文章将硬件原理图类比为“硬件系统的架构图”,引导读者将软件API调用思维迁移到硬件接口理解上,详细解析了电阻、电容、二极管等常见元器件的“硬件API”功能与选型逻辑,并通过实战电路拆解,阐述了从原理图分析到驱动代码编写的完整思维链条,帮助开发者建立软硬件协同的系统级视角。

lg888的博客 496

Codeforces Round #433

CF854A Fraction(gcd/数学) CF854B Maxim Buys an Apartment(思路) CF853A Planning(贪心+优先队列)

Icefox的博客 418

QMT量化交易实战:如何用通达信预警数据自动买卖股票(附完整Python代码)

本文详细介绍了如何利用QMT平台结合通达信预警数据实现股票自动化交易,提供完整的Python代码实现。通过实时监控通达信预警板块文件,系统自动执行买卖操作,提升交易效率。文章涵盖系统架构设计、数据对接、信号处理、订单执行等核心模块,适合量化交易初学者和通达信用户参考实践。

weixin_29251567的博客 678

Codeforces Round #433 (Div. 2) 总结

这场么…又一次打炸掉了..(不知道为啥这场他们的手速都这么快,我在1:47用一个保证fst的算法过了D题pp结果也才400名)..最后加上D题fst…排名可想而知。(惨啊!qwq) 最终排名:rank813,rating-=41,目前rating:1764(好像这几场下来离紫名越来越远了啊有木有…) P.S. 这场打完我还有一个教训…虽然打前两题手速要快,但是..太快就会GG啊。。 A.

Ephemeral 583

微信小程序返回按钮的隐藏玩法:用onShow实现数据自动刷新(附完整代码)

本文深入探讨了微信小程序中用户点击返回按钮后,如何利用onShow生命周期函数实现页面数据的自动刷新。文章对比了onLoad与onShow的差异,提供了从基础的本地存储标记到进阶的EventChannel事件通信,再到状态管理库的多种解决方案,并附有完整的代码示例,帮助开发者构建流畅的用户体验。

agile9scrum的博客 925

OpenClaw实战:拒绝复制粘贴,用 xlsx 技能打通“带公式模板”的月报自动化

本文详解了如何利用 OpenClaw 框架搭载的 xlsx skill,解决 AI 自动化处理“带复杂公式与格式”Excel 月报时极易翻车的业务痛点。针对传统大模型粗暴写入导致模板报废的问题,OpenClaw 创新采用“双核微创”工作流:首先利用 pandas 高效清洗并聚合海量原始明细数据,随后切换至 openpyxl 将计算结果精准注入目标模板,完美保留原有的底色、边框与跨表动态公式。

我有一个梦想 151

Codeforces Round #433 (Div. 2) 题解

Codeforces Round #433 (Div. 2)手。。。手速场?A: 水#include<bits/stdc++.h> using namespace std; typedef long long ll; int gcd(int a,int b) { return a%b?gcd(b,a%b):b; } int main() { int n,a; cin >> n;

On the way 333

题解:洛谷 P14357 [CSP-J 2025] 拼数

等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。小 R 想知道,在他所有能拼成的正整数中,最大的是多少。你需要帮助小 R 求出他能拼成的正整数的最大值。小 X 给了小 R 一个字符串。输出一行一个正整数,表示小 R 能拼成的正整数的最大值。中的任意多个数字,按任意顺序拼成一个正整数。,表示小 X 给小 R 的字符串。#普及-# #其他排序#洛谷:[P14357。

团爸讲算法 1395

Codeforces Round #433 div2 C,D 题 题解

CF – 835A 传送门 //题意: 给定n,k. 重新安排一个时间表, 范围是(k+1,k+n), 你需要计算的是一个新的时刻表, 使得res = (第一个时间 -1)*a[1] + (第二个时间 -2)*a[2] + … 要最小. a[1] - a[n] 是题目中给出的. //思路: 也是比较简单的一道题, 我们贪心的选择对于输入的cost越大的, 我们就从(k+1, k+n)中选出

Anxdada -- 我等风来也等你 552

Python3+PCAN-USB基于PCAN-Basic二次开发实现上位机功能

一、环境搭建 1.概述 本文主要是通过Python3与CAN总线工具PCAN-USB基于官方PCAN-Basic库实现CAN总线消息读写功能。 2.PCANBasic.py和PCANBasic.dll下载地址 https://www.peak-system.com/fileadmin/media/files/pcan-basic.zip 3.Python安装 下载地址:https://www.p...

测试领域技术分享 5185

Codex CLI 手机号验证失败?5 种接码平台实测对比与绕过地区限制的 3 步操作

揭示 Codex CLI 手机号验证失败的真实原因在于上下文污染而非网络问题,分析其通过 ASN、Accept-Language 和 TLS SNI 三重加权风控的机制,并实测对比 5 种接码平台在 DNS 解析路径、ASN 干净度和复用间隔上的差异,提出剥离浏览器指纹、固化 TLS SNI、隔离

weixin_42627902的博客 734

Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises)题解

其实我是比较后悔的,距离最终目标又远了一步。 Wuuuuuuu..... 只做了2题,完全GG 传送门 :http://codeforces.com/contest/854/题目传送门 对了 现在还不会用Markdown,于是就用了sublime编辑的,哈哈--*-- A. Fraction 照例水题 已知 n 为某个分子和分母的和,求所有小于1的分数中不可再约的最大分数。

等我红名,我就再也不code了 439

(11)(2.2.2) BLHeli32,AM32, and BLHeli_S ESCs(一)

Ardupilot官网关于《Peripheral Hardware》的翻译 —《(2.2.2) BLHeli32,AM32, and BLHeli_S ESCs》。

无人机开发(开源Ardupilot) 2232

【codeforces】【比赛题解】#854 CF Round #433 (Div.2)

cf一如既往挺丧 看丧题点我! 【A】分数 Petya是数学迷,特别是有关于分数的数学。最近他学了所谓一个分数被叫做“真分数”当且仅当其分子小于分母,而一个分数被叫做“最简分数”当且仅当其分子分母互质。在闲暇时间,Petya在用计算器研究:如何把最简真分数转换为小数等问题。有一天他不小心把除号(÷)按成了加号(+),导致他得到了分子与分母的和。Petya想要得到他原来的分数,但他很...

weixin_30861459的博客 81

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises) A—C题解

传送门:点击打开链接 A. Fraction time limit per test 1 second memory limit per test 512 megabytes input standard input output standard output Petya is a big fan of

Ever_glow的博客 1058

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises)

近期最后一场cf了,双休日icpc网络赛之后,就要开始准备数模国赛了,加油吧 A. Fraction 思路:寻找最大最简真分数,题有点长,不过理解后难度不大,枚举判断gcd即可 /* Author Owen_Q */ #include <bits/stdc++.h> using namespace std; const int maxn = 1e5+10...

Owen_Q的博客 379

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Codeforces Round #433 (Div. 2) C. Planning(贪心)

题目链接:Codeforces Round #433 (Div. 2) C. Planning 题意: 有n架飞机要起飞,起飞的时间是t1=k+1,t2=k+2...tn=k+n。 现在有n个位置,每个位置的cost为(t-i)*ai(t>=i),现在问你如何给每架飞机安排位置,使得sumcost最小。 题解: 考虑贪心,先将ai从大到小排序,显然对于大的a,乘的数越小越好,然后...

weixin_30867015的博客 138

Codeforces Round #779 (Div. 2) 题解

给定 l , r,取值在 [ l , r ] ,长度为 r - l + 1 的某个排列 a ,该排列 a 所有元素与某个 x 异或形成了新的排列,现在给出这个新的排列,求解 x ,可能有多种答案,输出任意一种。现在给出 c 数组,ci 代表 排列 p 的 i circle 排列 的power,问是否存在合法的排列 p ,满足给定的 c。给一串长度为 n 的01串,先要向其中插入若干个1,保证该串的所有子序列的0的数量不超过1,问最少插入几个1可以满足要求。

m0_55733023的博客 437

Codeforces Round #433 (Div. 1) D. Michael and Charging Stations(dp)

题目链接:Codeforces Round #433 (Div. 1) D. Michael and Charging Stations 题意: 一个人每天要加油,1种为1000,1种为2000,如果付全额,会得到10%的回扣放在卡上。 如果卡上有剩余的回扣,可以拿来抵现金。问n天最少需要花多少钱。 题解: 很直观的一个dp就是考虑dp[i][j],表示第i天卡上剩余回扣为j的最小花费。...

weixin_30650859的博客 151

Codeforces Round #433 (Div. 2)【A、B、C、D题】

题目链接:Codeforces Round #433 (Div. 2) codeforces 854 A. Fraction【水】 题意:已知分子与分母的和,求分子小于分母的 最大的最简分数。 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #...

dhe56357的博客 202

[Codeforces Round #433][Codeforces 853C/854E. Boredom]

题目链接:853C - Boredom/854E - Boredom 题目大意:在\(n\times n\)的方格中,每一行,每一列都恰有一个被标记的方格,称一个矩形为漂亮的当且仅当这个矩形有两个角是被标记的方格(这样的矩形有\(\frac{n(n-1)}{2}\)个)。给出\(q\)组询问,询问为一个二维区间,问有多少个漂亮的矩形与之相交。 题解:考虑每一个询问,将题中的方格分为如...

258

Codeforces Round #433 Div. 1

  A:显然从大到小排序后贪心放在第一个能放的位置即可。并查集维护。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using names...

weixin_30752699的博客 70

Codeforces Round #631 (Div. 2)

比赛链接:https://codeforces.com/contest/1330 A. Dreamoon and Ranking Collection 知识点:枚举 只需要枚举一遍,遇到没出现的数字如果还有可用场次则场次数量减一,否则输出答案退出循环。 #include <bits/stdc++.h> using namespace std; #define LL long long ...

我不会玩锐雯的博客 201

Codeforces Round #830 (Div. 2)

Codeforces Round #830 (Div. 2)

AC__dream的博客 477
上一篇: UVALive - 7041 回文树
下一篇: Educational Codeforces Round 29 题解
just_sort
博客等级 码龄11年 2357粉丝 1667原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值