CCF- CSP 202303-2垦田计划 【多种方法】满分题解

这篇具有很好参考价值的文章主要介绍了CCF- CSP 202303-2垦田计划 【多种方法】满分题解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

CCF- CSP 202303-2垦田计划 【多种方法】满分题解

题目链接:CCF- CSP 202303-2垦田计划

70分思路:

  • 从基础耗时最长的区域进行筛选,每次基础耗时减少一天
  • 该方法以m作为参考对象,对m进行减的操作(m的数据范围达到1e9,导致超时)
  • 采用优先队列作为存储结构,同时存储tc

代码如下:文章来源地址https://www.toymoban.com/news/detail-427929.html

#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
const int N = 1e5+10;
int n,m,k;
typedef pair<int,int>PII;//采用pair同时存储t和c
priority_queue<PII,vector<PII> > heap;//采用优先队列
int main()
{
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++)
    {
        int t,c;
        cin>>t>>c;
        heap.push({t,c});//压入队列
    }
    while(m>0)
    {
        PII t = heap.top();//取出当前基础耗时最大的
        heap.pop();//记得删除最大点
        //如果最大值不满足条件
        if(t.first<=k)
        {
            heap.push(t);
            break;
        }
        m -=t.second;//每次只缩减一天
        t.first -= 1;
        heap.push(t);
    }
    cout<<heap.top().first<<endl;//输出基础耗时最大的值
    return 0;
}

100分思路1:

  • 在70分思路的基础上,发现超时的原因:m的数据范围达到了1e9,造成超时
  • 可能改进的方法:按照基础耗时的大小进行筛选,一次循环缩减大量资源。而不是像70分代码思路:一次只减少一天的资源量
  • 从基础耗时最小值k,最大值mx进行筛选,一次操作可以使m的值大量减少
  • 采用二分算法,对所有可能的耗时进行搜索(范围为k~mx),找到最短耗时

代码如下:

#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5+10;
int n,m,k;
int t[N],c[N];
int mx;//记录最大天数
//判断当前耗时天数x能否满足需求
bool jude(int x)
{
    int sum = 0;//记录资源总和
    for(int i=1;i<=n;i++)
    {
        if(t[i]<x)continue;//基础耗时小于x,不需要考虑资源消耗
        sum+=(t[i]-x)*c[i];//sum的值进行改变
        if(sum>m)return false;//如果资源总和大于m,不满足条件
    }
    return true;
}
int main()
{
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++)
    {
        cin>>t[i]>>c[i];
        mx = max(mx,t[i]);
    }
    int l=k,r=mx;//二分:左边起点为l,右边为mx
    while(l<=r)
    {
        int mid = (l+r)>>1;
        if(jude(mid)) r=mid-1;//满足条件,往小范围搜索
        else l = mid+1;
    }
    cout<<l<<endl;
    return 0;
}

100分思路2:

  • 70分思路是对每一个区域单独处理,仔细分析后,发现可以对同一基础耗时的区域同时处理
  • 单独开一个数组sa用来记录同一基础耗时的区域所需资源总数
  • mxk依次处理,每次使得最大基础耗时的区域同时减少一天

代码如下:

#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5+10;
int n,m,k;
int t[N],c[N];
int sa[N];//记录同一基础耗时缩减一天所需要的总资源
int mx;//记录基础耗时的最大值
int main()
{
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++)
    {
        cin>>t[i]>>c[i];
        sa[t[i]]+=c[i];//记录同一基础耗时缩减一天所需要的总资源
        mx = max(mx,t[i]);
    }
    int ans = mx;//记录结果
    for(int i=mx;i>=k;i--)
    {
        if(sa[ans]>m)break;
        m-=sa[ans];//同一基础耗时的同时减少一天
        sa[ans-1]+=sa[ans];//下一天的需要加上上一天的资源总数
        //ans的最小值为k
        if(ans>k)
        {
            ans--;
        }
    }
    cout<<ans<<endl;
    return 0;
}

到了这里,关于CCF- CSP 202303-2垦田计划 【多种方法】满分题解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • CCF-CSP真题《202303-3 LDAP》思路+python,c++满分题解

    CCF-CSP真题《202303-3 LDAP》思路+python,c++满分题解

    想查看其他题的真题及题解的同学可以前往查看:CCF-CSP真题附题解大全 试题编号: 202303-3 试题名称: LDAP 时间限制: 12.0s 内存限制: 1.0GB 问题描述: 西西艾弗岛运营公司是一家负责维护和运营岛上基础设施的大型企业,拥有数千名员工。公司内有很多 IT 系统。为了能够实

    2024年02月12日
    浏览(58)
  • CCF-CSP真题《202303-1 田地丈量》思路+python,c++,java满分题解

    CCF-CSP真题《202303-1 田地丈量》思路+python,c++,java满分题解

    想查看其他题的真题及题解的同学可以前往查看:CCF-CSP真题附题解大全 试题编号: 202303-1 试题名称: 田地丈量 时间限制: 1.0s 内存限制: 512.0MB 问题描述: 西西艾弗岛上散落着 n 块田地。每块田地可视为平面直角坐标系下的一块矩形区域,由左下角坐标 (x1,y1) 和右上角

    2024年02月09日
    浏览(52)
  • CCF- CSP 202212-2训练计划 详细思路 满分题解(结尾附自编测试用例)

    CCF- CSP 202212-2训练计划 详细思路 满分题解 题目链接:CCF- CSP 202212-2训练计划 思路: 测试数据满足 0n365,0m100 ,一般情况下不会超时,该题目大概率不是考察算法优化时间复杂度,重点应该放到算法实现上 对于最早开始时间,思路比较简单:如果当前科目没有依赖,则最早开

    2024年02月13日
    浏览(8)
  • 第29次CCF CSP 认证题目 第一题 202303-1 田地丈量 C++实现 满分答案

    第29次CCF CSP 认证题目 第一题 202303-1 田地丈量 C++实现 满分答案

    西西艾弗岛上散落着 n 块田地。每块田地可视为平面直角坐标系下的一块矩形区域,由左下角坐标 (x1,y1) 和右上角坐标 (x2,y2) 唯一确定,且满足 x1x2、y1y2。这 n 块田地中,任意两块的交集面积均为 0,仅边界处可能有所重叠。 最近,顿顿想要在南山脚下开垦出一块面积

    2023年04月15日
    浏览(45)
  • CCF-CSP认证 202303 500分题解

    CCF-CSP认证 202303 500分题解

    202303-1 田地丈量(矩形面积交) 矩形面积交=x轴线段交长度*y轴线段交长度 线段交长度,相交的时候是min右端点-max左端点,不相交的时候是0 202303-2 垦田计划(二分) 二分最终答案x(x=k),判断降到x天资源是否够 够的话就往小里二分,否则往大里二分, 当然贪心也可以做

    2023年04月18日
    浏览(49)
  • CCF-CSP历年真题大全附题解(202303已更)

             各位朋友,历年的题目你们要是有不同的解法想和大家进行分享的,可以私聊我发我题目编号和代码,我也可以更新到文章中,给需要的朋友多点参考~~           CCF-CSP真题拿来练手,持续更新,CCF-CSP真题拿来练手,如果对自己没有拿高分的期望的话,可以就

    2024年02月01日
    浏览(10)
  • 2023CSP-CCF前三题 田地丈量、垦田计划、LDAP解题分析

    2023CSP-CCF前三题 田地丈量、垦田计划、LDAP解题分析

    2023.03第29次CCF-CSP计算机认证考试 CCF计算机软件能力认证考试系统 大二菜鸟第一次参加CSP考试,发挥得很烂( 其实是实力太菜了 ),考前也没看往年题目套路,有很多不甘吧,不过拟打算六月再参加一次。如果早知道题目难度是依次递增的,就不写完两题就去啃最后一题了

    2024年02月05日
    浏览(10)
  • CCF-CSP 202209-1 如此编码 C语言 (满分通过代码+题解)

    试题编号: 202209-1 试题名称: 如此编码 时间限制: 1.0s 内存限制: 512.0MB 问题描述: 某次测验后,顿顿老师在黑板上留下了一串数字 23333 便飘然而去。凝望着这个神秘数字,小 P 同学不禁陷入了沉思…… 已知某次测验包含 n 道单项选择题,其中第 i 题(1≤i≤n)有 

    2023年04月15日
    浏览(9)
  • CCF-CSP真题《202305-3 解压缩》思路+python,c++满分题解

    CCF-CSP真题《202305-3 解压缩》思路+python,c++满分题解

    想查看其他题的真题及题解的同学可以前往查看:CCF-CSP真题附题解大全 试题编号: 202305-3 试题名称: 解压缩 时间限制: 5.0s 内存限制: 512.0MB 问题描述: 西西艾弗岛运营公司是一家负责维护和运营岛上基础设施的大型企业。在公司内,有许多分管不同业务的部门都需要使

    2024年02月13日
    浏览(39)
  • CCF-CSP真题《202305-1 重复局面》思路+python,c++满分题解

    CCF-CSP真题《202305-1 重复局面》思路+python,c++满分题解

    想查看其他题的真题及题解的同学可以前往查看:CCF-CSP真题附题解大全 试题编号: 202305-1 试题名称: 重复局面 时间限制: 1.0s 内存限制: 512.0MB 问题描述: 国际象棋在对局时,同一局面连续或间断出现3次或3次以上,可由任意一方提出和棋。 国际象棋每一个局面可以用大

    2024年02月13日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包