首页 > 其他分享 >2025/1/11 第25场蓝桥入门赛 题解

2025/1/11 第25场蓝桥入门赛 题解

时间:2025-01-11 22:57:58浏览次数:3  
标签:11 nums int 题解 cin 蓝桥 a2 include mex

A: 哪来的AC   :  题目链接

水题:31画

#include <iostream>
using namespace std;
int main()
{
  // 请在此输入您的代码
  cout<<31;
  return 0;
}

B: 酒店安排   : 题目链接

 思路:从大到小排序,求每两个相邻房间的差值  , 滑动窗口求m-1个差值最小,即为答案

要想最大距离最小化,就要连续住在一起

#include <bits/stdc++.h>
using namespace std;
int main()
{
  // 请在此输入您的代码
  int n,m;
  cin>>n>>m;
  vector<int> nums(n);
  for(int i=0;i<n;i++)
  {
      cin>>nums[i];
  }

  sort(nums.rbegin(),nums.rend());
    
  vector<int> ans;
  for(int i=0;i<n-1;i++)
  {
      ans.push_back(nums[i]-nums[i+1]);
  }

int res=0;
for(int j=0;j<m-1;j++)
{
    res+=ans[j];
}

int t=res;
for(int i=m-1,k=0;i<ans.size();i++,k++)
{
    t = t-ans[k]+ans[i];
    res = min(res,t);
}

  cout<<res<<endl;
  return 0;
}

 

C : 男女搭配  : 题目链接

思路:先计算最多能匹配几组(z),再判断剩下的人数(p)是否能满足k人;

如果能,直接输出z;

如果不能,计算 k-p  看还需要拆散几组(3人一组),再拿z减去需要拆散的组。

纯暴力会超时!  

#include <bits/stdc++.h>
using namespace std;
int main()
{
  // 请在此输入您的代码
  int t=0;
  cin>>t;
  int n,m,k;
  while(t--)
  {
      cin>>n>>m>>k;

      int z=min(n/2,m);   //最多几组
      
      int p=n-z*2 + m-z;
      if(p < k)
      {
        int w=(k-p)/3;  //需要几组
        if((k-p)%3)w++;
        z-=w;
      }
      
      cout<<z<<endl;
  }
  return 0;
}

 

D : 排列高手  : 题目链接

思路:找规律,数学题。    首先理解什么是子数组,一定要是连续的数字。

每次把1排在第一位,2排在最后。

当子数组只有一个数字时(即每个数字): 除了单独的1,mex是2 ,  其他都是mex都是1

 mex = 2+(n-1)  

当是本身时: mex = n+1   (1~n都有了)

当子数组包含1时: mex都是2   ,  有n-2个这种组合   mex = 2*(n-2)   

当不包含1时:  mex都是1 , 有 1+ 2 + ...... +(n-1)   种    ,等差数列求和 mex = (n-2)*(n-1)/2

全部情况相加 : mex = 4*n - 2 + (n-2)*(n-1)/2           ! 注意long long

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

int main() {
    long long n;
    cin >> n;
    cout << 4 * n - 2 + (n - 2) * (n - 1) / 2 << endl;
    return 0;
}

E : 混乱的草稿纸 : 题目链接

 思路: 先反转数组,则要求变为大的在前

从n开始统计:   n  ->   n-1  之间有多少个数,这些数都是要放后面的(都是小数)

n依次递减,把之间的数累加,即可

#include <bits/stdc++.h>
using namespace std;
int main()
{
  // 请在此输入您的代码
  int n;
  cin>>n;

  vector<int> nums(n);

int pos=0;
  for(int i=0;i<n;i++)
  {
      cin>>nums[n-i-1];
      if(nums[n-i-1] == n)pos=n-i-1;
  }

int ans=pos;
int k=n-1;
for(int i=pos+1;i<n;i++)
{
    if(nums[i] == k)k--;
    else ans++;
}

cout<<ans<<endl;
  return 0;
}

F : 完美数对  题目链接

思路: map会依据键值key 从小到大排序

if(a2 > b1)break;    //小到大排序,a2已经大了,后面肯定也大     ,提前结束
if(b2 >= a1)ans++;   //条件:b1>=a2 && b2>=a1

!纯暴力,不提前break会超时

#include <bits/stdc++.h>
using namespace std;
int main()
{
  ios::sync_with_stdio(false);
  cin.tie(0);
  // 请在此输入您的代码
  int n=0;
  cin>>n;

  int nums;
  map<int,int> hash;   //自动小到大排序

  for(int i=0;i<n;i++)
  {
      cin>>nums;
      hash[nums]++;   //个数
  }

  int ans=0;
    
  for(auto &[a1,b1]:hash)
  {
      for(auto &[a2,b2]:hash)
      {
          if(a2 > b1)break;    //小到大排序,a2已经大了,后面肯定也大
          if(b2 >= a1)ans++;   //条件:b1>=a2 && b2>=a1
      }
  }
  
  cout<<ans<<endl;
  return 0;
}

标签:11,nums,int,题解,cin,蓝桥,a2,include,mex
From: https://blog.csdn.net/punchlinezhy/article/details/145083678

相关文章

  • 题解:P1970 [NOIP2013 提高组] 花匠
    闲话本文同步发布在cnblogs。正题容易发现此题要求花必须一高一低摆放。最优化问题,看不出怎么贪心,遂DP。设计状态\(f_{i,0}\)表示当前为上升形势最长花序列,\(f_{i,1}\)表示当前为下降形势最长花序列。状态转移由于需要一高一低,易得:\[f_{i,0}=\begin{cases}......
  • P3247 [HNOI2016] 最小公倍数 题解
    \(\text{P3247[HNOI2016]最小公倍数题解}\)第一眼上去没什么明显的思路。图上问题一般没有什么好的多项式复杂度算法来解决。观察数据范围,注意到\(n,q\le5\times10^4\),是一个典型的根号复杂度算法,于是考虑分块来处理。注意到所求的不一定是简单路径,也就是在不超过所需要的......
  • 1.11鲜花
    感觉这两天停课有点不太对劲……本身因为csp-s打烂了赛季报销之后就没有什么事了的,车人却还要以T/P营赛前要拉进度的理由把我们喊过来停课。说实话本身还是想停课的,但停了了一天就发现T和P都去不了,最后车人拉进度又拉的奇快无比(例如放一个一上午的题单有一堆多项式与生......
  • 《痞子衡嵌入式半月刊》 第 116 期
    痞子衡嵌入式半月刊:第116期这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。本期刊是开源项目(GitHub:JayHeng/pzh-mcu-bi-weekly),欢迎提交issue,投稿或推荐你知道的嵌入式那些事儿。上期回顾:《痞子衡嵌入式半月......
  • Lec 11 调度
    Lec11处理器调度License本内容版权归上海交通大学并行与分布式系统研究所所有使用者可以将全部或部分本内容免费用于非商业用途使用者在使用全部或部分本内容时请注明来源资料来自上海交通大学并行与分布式系统研究所+材料名字对于不遵守此声明或者其他违法使用本内容者,将......
  • P10200 花神诞日 题解
    P10200[湖北省选模拟2024]花神诞日题解首先注意到一个集合中两两异或和的最小值就是,排序后相邻两个数异或和的最小值。证明可以考虑放到01-Trie上,从高往低位建树,求一个数与之异或的最小值,就是使高位相同位数尽可能多,则就是01-Trie上的前一个叶子或后一个叶子。由此,我们......
  • 线性代数11.三种初等矩阵及其性质
    11.三种初等矩阵及其性质11.1三种初等矩阵设存在列向量A:\[A=\begin{bmatrix}a_1\\a_2\\a_3\\a_4\\...\\a_i\\...\\a_j\\...\\a_n\end{bmatrix}\]则以下\(X_1,X_2,X_3\)三种矩阵分别与A相乘后,可对A进行三种初等变换:11.1.1矩阵\(X_1\):对应\(a_i\leftrightarrow......
  • 题解:P2296 [NOIP2014 提高组] 寻找道路
    条件第一步,要能到达\(t\)点,建反图跑一遍。记录哪些点可行。第二步,扫描每个点,若其旁边均为标记过的,说明点的出边所指向的点都直接或间接与终点连通。记录这个点第二次第三步,在原边枚举每条边,若两个节点均被记录了第二次,加入一个新图,否则扔掉。对新图进行BFS即可。代码:#inc......
  • 题解:P2822 [NOIP2016 提高组] 组合数问题
    组合数,还是多测,考虑预处理所有答案。组合数的递推公式如下,证明在本文底部:\[C_{i,j}=C_{i-1,j}+C_{i-1,j-1}\]由于求的是是否能被\(k\)整除,转化式子为:\[C_{i,j}=(C_{i-1,j}+C_{i-1,j-1})\bmodk\]易得若\(C_{i,j}=0\)即为可整除。但这样每次......
  • 洛谷B3733 [信息与未来 2017] 基因组分析密码锁题解
    [信息与未来2017]密码锁题目描述乌龟给自己的贵重物品上了密码锁。密码锁上有5 个数字拨盘。每个数字拨盘每次向上拨使数字增加1 (9 向上拨得到0),向下拨使数字减少1 (0 向下拨得到9)。拨盘上的数字组成一个5 位数。只要拨盘上的数字变为素数,密码锁就会被解开。素......