【传智杯】排排队、小卡与质数 2、1024 程序员节发橙子题解

🍎 博客主页:🌙@披星戴月的贾维斯
🍎 欢迎关注:👍点赞🍃收藏🔥留言
🍇系列专栏:🌙 蓝桥杯
🌙请不要相信胜利就像山坡上的蒲公英一样唾手可得,但是请相信,世界上总有一些美好值得我们全力以赴,哪怕粉身碎骨!🌙
🍉一起加油,去追寻、去成为更好的自己!

文章目录

  • 🍎1、# [传智杯 #4 决赛] 排排队
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 提示
      • 数据规模与约定
      • 提示
      • C++ 语言的高效输出样例
      • Java 语言的高效输出样例
      • 分析题意:
  • 🍎2、# [传智杯 #4 初赛] 小卡与质数 2
    • 题目背景
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
      • 分析题意:
  • 🍎3、# [传智杯 #2 初赛] 1024 程序员节发橙子
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 提示
        • 样例 1 解释
        • 数据规模与约定
      • 分析题意:
  • 🍎总结

提示:以下是本篇文章正文内容,下面案例可供参考


    这次我们继续和大家分享一些传智杯题解,多刷题对我们来说是一件非常重要的事,坚持下去会有很多收获!

🍎1、# [传智杯 #4 决赛] 排排队

题目描述

cyq 在 tsyz 担任了体育老师,负责排队一事。

在 tsyz 中,每个人都有一个身高 a i a_{i} ai,并且只有相邻的两个人可以交换位置。cyq 带领的队伍有 n n n 个人,他现在要给大家排队形。

给定一个长度为 n n n 的序列 b b b,一个队形被认为美观,当且仅当对于所有的 i = 1 , 2 , 3 , … n i = 1, 2, 3, \dots n i=1,2,3,n a i = b i a_{i} =b_{i} ai=bi。cyq 想知道,他能否让大家的队形变得美观,并且交换相邻两个人的次数不超过 n 2 n^2 n2 次。这个问题把 c y q cyq cyq 难住了,请你帮他来解决这个问题,如果存在合法的交换方案,输出 YES,并给出一组方案;否则,输出 NO

输入格式

本题单测试点内有多组测试数据

第一行是一个整数 T T T,表示数据组数,对于每组数据:
第一行是一个整数,表示队伍的长度 n n n
第二行有 n n n 个整数,第 i i i 个整数表示第 i i i 个人的身高 a i a_i ai
第三行有 n n n 个整数,第 i i i 个整数表示美观队形里第 i i i 个人的身高 b i b_i bi

输出格式

对每组数据依次分别输出答案。

对于每组数据,若存在一种方案,则在第一行输出一个 YES,否则输出一个 NO

如果输出 YES,下面则输出若干行每行两个整数 i , j i,j i,j,表示第 i i i 个同学和第 j j j 个同学交换位置,显然 ∣ i − j ∣ = 1 |i-j|=1 ij=1。在交换完成后,你还需要输出一行 0 0 表示你的操作结束了,请注意数组的下标从 1 开始编号至 n n n

如果输出 NO,则接下来什么都不需要输出。

请特别注意,对于每组数据,你的操作次数不能超过 n 2 n^2 n2(不包括 0 0 一行),否则将得到 WA(Wrong Answer) 的结果

样例 #1

样例输入 #1

3
4
1 2 2 3
3 2 2 1
3
1 2 3
1 2 4
1
1
1

样例输出 #1

YES
4 3
2 3
1 2
3 2
3 4
0 0
NO
YES
0 0

提示

数据规模与约定

对于全部的测试点,保证 1 ≤ T ≤ 10 1\leq T \leq 10 1T10 1 ≤ n ≤ 1 0 3 1\leq n \leq 10^3 1n103 1 ≤ a i , b i ≤ 1 0 9 1\leq a_{i},b_{i}\leq 10^9 1ai,bi109,且各个测试点 n n n 之和不超过 1000 1000 1000,即 ∑ n ≤ 1 0 3 \sum n\leq 10^3 n103

提示

  • 请注意大量的输出输出对程序效率造成的影响,不要频繁刷新缓冲区。例如,对于使用 std::cout 的 C++ 选手,请使用 '\n' 而不是 std::endl 来换行;对于 java 选手,请选择高效率的输出方式,如使用 PrintWriter;python 选手可以正常的使用 print 而无需考虑效率问题。
  • 请按照输出格式的要求输出您的答案,如果格式不符合要求,返回的评测信息将可能是 TLE、RE、WA、UKE 等任何结果。

C++ 语言的高效输出样例

#include <iostream>
int main() {std::ios::sync_with_stdio(false);std::cin.tie(0);for (int i = 1; i <= 5; ++i) {std::cout << i << '\n'; // 注意这里不能使用 std::endl}
}

Java 语言的高效输出样例

import java.io.PrintWriter;public class Main {public static void main(String[] args) {PrintWriter ot = new PrintWriter(System.out);for (int i = 1; i <= 5; ++i) {ot.println(i);}ot.flush(); // 请务必保证在程序结束时运行本条语句,否则在缓冲区的内容无法输出}
}

分析题意:

我们先看题目,发现该题的输出不仅要我们判断队形是否“美观”,而且如果,美观,我们还要输出交换的过程,就是这个输出交换过程会让人比较头疼,但是结合题目的意思,我们每次只能交换相邻的两个数,这个不就对上了我们的冒泡排序了吗,然后我们把每次交换的位置输出即可,然后如果是判断队形是否美观,我们可以用另外两个对照数组,排序后,如果是美观,就输出YES,否则NO,因为冒泡排序复杂度最差是n方,不用考虑题目的限制 n <1000,等等。
C++代码示例:

#include<bits/stdc++.h>
using namespace std;
const int N = 1e3 +10;
int t;
int a[N], b[N], c[N], d[N];void solve()
{int n;bool flag = false;cin >> n;for(int i = 1; i <= n; i++){cin >> a[i];c[i] = a[i];// c数组是a的对照数组}for(int i = 1; i <= n; i++){cin >> b[i];d[i] = b[i];}sort(c + 1, c + 1 + n);sort(d + 1, d + 1 + n);for(int i = 1; i <= n; i++){if(c[i] != d[i]){cout << "NO" << '\n';flag = true;break;}}if(!flag){cout << "YES\n";for(int i = 1; i <= n; i++){if(a[i] != b[i]){for(int j = i; j <= n; j++)if(a[j] == b[i]){for(int k = j; k > i; k--){swap(a[k], a[k - 1]);cout << k << " " << k - 1 << '\n';}break;}}}cout << "0 0\n";}
}
int main ()
{ios::sync_with_stdio(0);cin.tie(0);cin >> t;while(t --){solve();}return 0;
}

🍎2、# [传智杯 #4 初赛] 小卡与质数 2

题目背景

小卡迷上了质数!

题目描述

小卡最近迷上了质数,所以他想把任何一个数都转化为质数!

小卡有 T T T 次询问,每次给你一个数字 x x x,问有多少个比 x x x 小的非负整数 y y y,使得 x ⊕ y x\oplus y xy 是质数,其中 ⊕ \oplus 表示按位异或。

输入格式

第一行一个正整数 T ( 1 ≤ T ≤ 1 0 5 ) T(1\le T\le10^5) T(1T105),表示有 T T T 组询问。

接下来 T T T 行,每行一个正整数 x ( 1 ≤ x ≤ 1 0 6 ) x(1\le x\le 10^6) x(1x106)

输出格式

对于每组询问,输出一行一个整数,表示答案。

样例 #1

样例输入 #1

9
5
6
7
8
9
10
100
1000
10000

样例输出 #1

2
4
4
2
2
4
22
163
1132

分析题意:

我们通过审题不难发现这题是考我们筛质数和位运算的,但是看这道题的数据量1e5次询问,所以会很卡时间复杂度,筛质数的复杂度是nlogn,刚好能过,如果是n*n的双重循环判断有几个符合,那就会超时,所以这道题难度还是比较大的,一起来看看代码是怎么实现的吧。

#include<bits/stdc++.h>
using namespace std;const int N = 2e6 + 10;
int t;
int primes[N], cat[26];
bool st[N];
int n, cnt;
void get_primes(int n)
{for(int i = 2; i <= n; i++){if(!st[i]) primes[++cnt] = i;//把每个数的倍数删掉for(int j =1; j <= cnt &&i*primes[j] <= n; j++){st[primes[j] * i] = true;if(i % primes[j] == 0) break;}}for(int i = 1; i <= cnt; i++)for(int j = 25; j >= 1; j--)if(primes[i]&(1 << (j - 1))){cat[j]++;break;}
}
void solve()
{int x;int ans = 0;cin >> x;for(int i = 25; i >= 1; i--)if(x&(1<<(i - 1)))ans += cat[i];cout << ans << endl;}
int main ()
{get_primes(N);cin >> t;while(t --){solve();}return 0;
}

🍎3、# [传智杯 #2 初赛] 1024 程序员节发橙子

题目描述

每年的 1024 程序员节日,黑马程序员都会举办大型的庆祝活动。今年的程序员节也不例外,每个班级的同学都发了橙子。

班级里有 n n n 名同学从前到后排成一排,且已经得知了这些同学的成绩,其中第 i i i 名同学的成绩是 a i a_i ai。班主任想根据同学们上个阶段的考试成绩来评定发橙子的数量。为了激励成绩优秀同学,发橙子时需要满足如下要求:

  • 相邻同学中成绩好的同学的橙子必须更多。若相邻的同学成绩一样,则它们分到的数量必须平等。
  • 每个同学至少分配一个橙子

由于预算有限,班主任希望在符合要求的情况下发出尽可能少的橙子。请问,至少需要准备多少橙子呢?

输入格式

第一行是一个整数 n n n,表示学生数量。

接下来一行有 n n n 个整数,第 i i i 个整数 a i a_i ai,表示第 i i i 个同学的成绩。

输出格式

输出答案,也就是需要最少准备多少个橙子。

样例 #1

样例输入 #1

5
3 4 5 4 3

样例输出 #1

9

提示

样例 1 解释

每位同学拿到的橙子的数量分别是 1 , 2 , 3 , 2 , 1 1,2,3,2,1 1,2,3,2,1,所以至少需要准备 9 9 9 个。

数据规模与约定

对于全部的测试点,保证 1 ≤ n ≤ 1 0 6 1 \leq n \leq 10^6 1n106 0 ≤ a i ≤ 1 0 9 0 \leq a_i \leq 10^9 0ai109

分析题意:

这道题是让我们按照一个规则分发橘子,但是-相邻同学中成绩好的同学的橙子必须更多。若相邻的同学成绩一样,则它们分到的数量必须平等和 每个同学至少分配一个橙子这两个条件可能会相互冲突(一些情况下),所以当我们要找出,分发的橘子的最少数,一种理想的情况是成绩是排好序的从小到大或者从大到小,这样我们发橙子和统计就会比较简单,用这个思路再推广,我们可以求一遍正的递增序列的橙子数,再求递减序列的橙子数,有冲突就选大的那个,即可求出答案。
C++代码示例

#include<bits/stdc++.h>
using namespace std;const int N = 1e6 + 10;
typedef long long ll;
int a[N], t[N]; //a组存成绩,t组存橘子数
int n, k;
ll ans = 0;
int main ()
{cin >> n;for(int i = 1; i <= n; i++) cin >> a[i], t[i] = 1;//求正递增子序列for(int i = 2; i <= n; i++){if(a[i - 1] < a[i]) t[i] = t[i - 1] + 1;if(a[i - 1] == a[i]) t[i] = t[i - 1];}//求反不降子序列for(int i = n; i >= 2; i --){if(a[i] < a[i - 1]) t[i - 1] = max(t[i - 1], t[i] + 1);if(a[i - 1] == a[i]) t[i - 1] = t[i];}for(int i = 1; i <= n; i++) ans += t[i];cout << ans << endl;return 0;
}

🍎总结

    这次和大家分享了传智杯的几题普及/普及+难度的题,希望大家读后能有所收获!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/186691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络基础_1

目录 网络基础 协议 协议分层 OSI七层模型 网络传输的基本流程 数据包的封装和分用 IP地址和MAC地址 网络基础 网络就是不同的计算机之间可以进行通信&#xff0c;前面我们学了同一台计算机之间通信&#xff0c;其中有进程间通信&#xff0c;前面学过的有管道&#xff…

Redis之秒杀系统

目录 Redis 秒杀 Mysql数据库设计 Mysql秒杀实现 MysqlRedis秒杀实现 秒杀是一种高并发场景&#xff0c;通常指的是在短时间内&#xff08;秒级别&#xff09;有大量用户同时访问某个商品或服务&#xff0c;争相抢购的情景。在这种情况下&#xff0c;系统需要处理大量并发请…

LSTM seq2seq 模型之英语到法语翻译

1. 数据集下载 Machine-Translation-eng-fra | Kaggle 2. 预处理的完整的代码 import os.pathimport numpy as np import tensorflow as tf import keras from keras.callbacks import EarlyStopping, ModelCheckpoint from keras.preprocessing.text import Tokenizer from …

Openai通用特定领域的智能语音小助手

无穷尽的Q&A 钉钉...钉钉... 双双同学刚到工位,报销答疑群的消息就万马纷沓而来。她只能咧嘴无奈的摇摇头。水都还没有喝一口就开始“人工智能”的去回复。原本很阳光心情开始蒙上一层薄薄阴影。在这无休无止的Q&A中&#xff0c;就算你对工作有磐石一般强硬&#xff0…

Linux C/C++高级全栈开发(后端/游戏/嵌入式/高性能网络/存储/基础架构)

Linux C/C高级全栈开发是一个涉及到多个领域的综合性技术要求&#xff0c;需要对Linux系统、C/C编程语言以及各种相关的技术进行深入的理解和应用。 下面是一些涵盖的主要技术领域和技能要点&#xff1a; Linux系统基础&#xff1a;熟悉Linux操作系统的原理和常用命令&#xf…

Linux下的文件IO之系统IO

1. 知识点 读入写出&#xff0c;切记以我们程序为中心向文件或者别的什么东西读入写出&#xff08;输入流输出流&#xff09; 人话就是 文件向我们程序就是读入 程序向文件或者别的什么就是写出 2. open打开文件 open.c /****************************************************…

手写VUE后台管理系统5 - 整合状态管理组件pinia

整合状态管理组件 安装整合创建实例挂载使用 pinia 是一个拥有组合式 API 的 Vue 状态管理库。 pinia 官方文档&#xff1a;https://pinia.vuejs.org/zh/introduction.html 安装 yarn add pinia整合 所有与状态相关的文件都放置于项目 src/store 目录下&#xff0c;方便管理 在…

2021年6月3日 Go生态洞察:Fuzzing技术的Beta测试

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

电子学会C/C++编程等级考试2023年03月(三级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:和数(2023.3) 给定一个正整数序列,判断其中有多少个数,等于数列中其他两个数的和。 比如,对于数列1 2 3 4, 这个问题的答案就是2, 因为3 = 2 + 1, 4 = 1 + 3。 时间限制:10000 内存限制:65536输入 共两行,第一行是数列中…

8. 队列

队列(queue)是一种遵循先入先出规则的线性数据结构。顾名思义&#xff0c;队列模拟了排队现象&#xff0c;即新来的人不断加入队列的尾部&#xff0c;而位于队列头部的人逐个离开。 如下图所示&#xff0c;我们将队列的头部称为“队首”&#xff0c;尾部称为“队尾”&#xff…

HuggingFace学习笔记--Model的使用

1--Model介绍 Transformer的 model 一般可以分为&#xff1a;编码器类型&#xff08;自编码&#xff09;、解码器类型&#xff08;自回归&#xff09;和编码器解码器类型&#xff08;序列到序列&#xff09;&#xff1b; Model Head&#xff08;任务头&#xff09;是在base模型…

Rust UI开发(5):iced中如何进行页面布局(pick_list的使用)?(串口调试助手)

注&#xff1a;此文适合于对rust有一些了解的朋友 iced是一个跨平台的GUI库&#xff0c;用于为rust语言程序构建UI界面。 这是一个系列博文&#xff0c;本文是第五篇&#xff0c;前四篇链接&#xff1a; 1、Rust UI开发&#xff08;一&#xff09;&#xff1a;使用iced构建UI时…

神经影像和人类基因组关联分析的实践过程

神经影像和人类基因组关联分析的实践过程 摘要引言实施步骤1. 阶段1:处理转录图谱数据1.1 步骤1:验证探针到基因的注释1.2 步骤2:过滤探针1.3 步骤3:选择代表性探针1.4 步骤4:将组织样本分配到分块状的大脑区域1.5 步骤5:规范表达测量1.6 步骤6:选择在供体大脑中具有一致表达模…

MySQL实现(高可用方案-MHA安装及配置)

MySQL高可用性解决方案Master High Availability (MHA) 是一种在 MySQL 故障转移环境中实现快速故障转移和数据保护的开源软件。MHA 能在 MySQL 主节点发生故障时&#xff0c;自动将备节点提升为主节点&#xff0c;并且不会中断正在进行的 SQL 操作。 需求&#xff1a;主从配置…

力扣295. 数据流的中位数(java,堆解法)

Problem: 295. 数据流的中位数 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 由于该题目的数据是动态的我们可以维护两个堆来解决该问题 1.维护一个大顶堆&#xff0c;一个小顶堆 2.每个堆中元素个数接近n/2&#xff1b;如果n是偶数&#xff0c;两个堆中的数据个数…

【UGUI】实现UGUI背包系统的六个主要交互功能

在这篇教程中&#xff0c;我们将详细介绍如何在Unity中实现一个背包系统的六个主要功能&#xff1a;添加物品、删除物品、查看物品信息、排序物品、搜索物品和使用物品。让我们开始吧&#xff01; 一、添加物品 首先&#xff0c;我们需要创建一个方法来添加新的物品到背包中。…

使用开源PolarDB和imgsmlr进行高效的图片存储和相似度搜索

PolarDB的云原生架构提供高性价比的数据存储、可扩展的灵活性、高效的并行计算能力以及快速的数据搜索和处理能力。PolarDB通过结合计算算法&#xff0c;挖掘业务数据的价值&#xff0c;将其转化为生产力。 本文介绍如何使用开源PolarDB和imgsmlr存储图像特征值&#xff0c;并…

MyBatis的强大特性--动态SQL

目录 前言 if trim where set foreach 前言 动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架&#xff0c;你应该能理解根据不同条件拼接 SQL 语句有多痛苦&#xff0c;例如拼接时要确保不能忘记添加必要的空格&#xff0c;还要注意去掉列表…

【java】记一次Java应用查询不到最新数据的问题

文章目录 项目第一次上线前&#xff0c;生产环境调试阶段&#xff0c;项目经理反馈在备机房所在环境验证时报错&#xff1a;id不存在。 我赶紧去排查&#xff0c;查看日志&#xff0c;发现日志里打印的id是旧数据记作A&#xff0c;拿着这个数据去调其他系统提示id不存在。 查看…

JC/T 2087-2011建筑装饰用仿自然面艺术石检测

建筑装饰用仿自然面艺术石是指以硅酸盐水泥、轻质骨料为主要原料经浇筑成型的饰面装饰材料。 JC/T 2087-2011建筑装饰用仿自然面艺术石测试&#xff1a; 测试项目 测试方法 外观质量 GB/T 18601 尺寸偏差 GB/T 18601 体积密度 GB/T 9966.3 吸水率 GB/T 9966.3 压缩强…