当前位置: 首页 > news >正文

第十四届蓝桥杯模拟赛第二期部分题答案(C++代码)

A题

题面

请找到一个大于 2022 的最小数,这个数转换成二进制之后,最低的 6 个二进制为全为 0 。
请将这个数的十进制形式作为答案提交。

答案:2048

B题

题面

我们计从 1949 年 10 月 1 日至 1949 年 10 月 2 日为经过了 1 天。请问从 1949 年 10 月 1 日至 2022 年 1 月 1 日经过了多少天?

答案:26390

C题

题面

8518 是一个非常特殊的数,如果把这个数看成 16 进制数,它的值为 (8518)16=8161616+51616+116+8=34072,而 34072 正好是 8518 的整数倍。9558 也是这样一个数,当看成 16 进制时是 38232。其实长度为 1 的数 0 到 9 都满足看成 16 进制后是自己的整数倍(1倍)。请问,除开长度为 1 的数,最小的满足这样条件的数是多少?

答案:1038

D题

题面

小蓝有一个 30 行 60 列的数字矩阵,矩阵中的每个数都是 0 到 9 之间的数字。现在小蓝想从这个矩阵的第一行第一列画一条折线到第 30 行 60 列,线只能沿水平向右走或竖直向下走,只能在有数字的地方拐弯。小蓝想知道,这样一条线经过的数字的和最大是多少。

答案:592

E题

题面

将 2022 拆分成不同的质数的和,请问最多拆分成几个?

答案:32

J题

题面

小蓝有一个序列 a[1], a[2], …, a[n],每次可以交换相邻的两个元素,代价为两个元素中较大的那个。请问,要通过交换将序列变为从小到大递增的序列,总代价最少为多少?

输入格式

输入一行包含一个整数 n ,表示序列长度。
第二行包含 n 个整数,表示给定的序列。

输出格式

输出一行包含一个整数,表示最少代价的值。

数据范围

对于 30% 的评测用例,1 <= n <= 1000, 1 <= a[i] <= 1000。
对于 60% 的评测用例,1 <= n <= 50000, 1 <= a[i] <= 50000。
对于所有评测用例,1 <= n <= 1000000, 1 <= a[i] <= 1000000。

算法(贪心,逆序对,树状数组)

给定一个序列x1到xn,假如xi是目标元素,xj是排完序后的位置(且xj>xi)(xj<xi是同理的),然后目标元素移动到对应位置需要移动xj ~ xi次,若存在x≥目标元素,将目标从xi移到xj后,x则会向前一个位置,后续需要再次移动,即至少计算两次x,此时不是最优解

当目标移到xj时,xi到xj序列变成xi+1到xj、xi序列,原序列xi到xj中, xi+1到xj上的元素对于目标来说都是1(目标对后续那段序列造成的逆序对是1),移动完后,xi+1到xj都向前移动了一个位置,即对于xj来说当前位置是xj-1,因此需要代入逆序对。

逆序对的求法有归并排序、树状数组、线段树的方法,这里用树状数组来求逆序对,求的是该数前面有几个比它大的。

经过一番思考后可以得出式子:(新坐标-(原坐标-该数的逆序对))

代码

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N = 1e6+10;
LL res;
int n,ni[N];
int tr[N];

struct Node
{
    int data,id;
    bool operator < (const Node &W)
    {
    	//排序关键字
        if(data == W.data) return id<W.id;
        return data<W.data;
    }
}node[N];

int lowbit(int x)
{
    return x&-x;
}

int query(int x)
{
    int res=0;
    for(int i=x; i; i-=lowbit(i)) res+=tr[i];
    return res;
}

void add(int x,int v)
{
    for(int i=x; i<N; i+=lowbit(i)) tr[i]+=v;
}

int main()
{
    scanf("%d", &n);
    for(int i=1; i<=n; i++)
    {
        scanf("%d",&node[i].data);
        node[i].id=i;
    }
    //求当前数前面比它大的个数
    for(int i=1; i<=n; i++)
    {
    	//线段树求逆序对
        ni[node[i].id]=query(N-1)-query(node[i].data);
        add(node[i].data,1);
    }
    sort(node+1,node+n+1);
    for(int i=1; i<=n; i++)
    {
    	//(新坐标-(原坐标-逆序对))
        res+=(LL)(i-(node[i].id-ni[node[i].id]))*node[i].data;
    }
    printf("%lld",res);
    return 0;
}

个人观点,非官方答案。

相关文章:

  • 面试半年,上个月成功拿到阿里offer,全靠我啃烂了学长给的这份笔记
  • 【RTS】安海波老师:SIP与RTC融合分享笔记
  • 网站都变成灰色了,它是怎么实现的?
  • JavaWeb中文件上传与下载
  • 信奥赛一本通题解目录(未做完)
  • YOLO系列算法改进方法 | 目录一览表
  • 粒子群算法和鲸鱼算法的比较(Matlab代码实现)
  • HTML5期末大作业:HTM+CSS+JS仿安徽开放大学官网(web前端网页制作课作业)
  • C语言:动态内存分配(3)
  • 基于纳芯微产品的尾灯方案介绍
  • 设置程序以管理员权限运行无效问题的排查过程分享
  • MySQL密码不要用0开头!!!
  • Java项目:ssm高校党员管理系统
  • RabbitMQ--延迟队列--使用/原理
  • Linux基础 - Web服务基础
  • 「面试题」如何实现一个圣杯布局?
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 0基础学习移动端适配
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • jdbc就是这么简单
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • 百度地图API标注+时间轴组件
  • 动态魔术使用DBMS_SQL
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 聊聊hikari连接池的leakDetectionThreshold
  • 人脸识别最新开发经验demo
  • 我的业余项目总结
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • 2017年360最后一道编程题
  • ionic异常记录
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #Java第九次作业--输入输出流和文件操作
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (分布式缓存)Redis哨兵
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (转)JAVA中的堆栈
  • .NET 事件模型教程(二)
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .Net7 环境安装配置
  • @RequestParam,@RequestBody和@PathVariable 区别
  • [ C++ ] STL_vector -- 迭代器失效问题
  • [ solr入门 ] - 利用solrJ进行检索
  • [BZOJ 2142]礼物(扩展Lucas定理)
  • [BZOJ 3282] Tree 【LCT】
  • [BZOJ1008][HNOI2008]越狱
  • [C++]模板与STL简介
  • [Erlang 0129] Erlang 杂记 VI 2014年10月28日