第七场小白入门赛题目及部分题解

1.thanks,mom

问题描述

母爱是宇亩中最柔和的力量,是一种无私奉献的奇迹。它如同一束温暖的阳光,照亮着我们前行的道路。母爱是一首催人泪下的歌曲,奏响着无尽的关怀和呵护。它如同一幅绚丽的画卷,展现着无限的包容和理解,
母爱是一种奇迹,它孕育着生命,滋养着希望。母亲用无私的爱将我们抚养成人用坚定的支持给予我们力量。她们默默付出,从不求回报,只为了我们能幸福成长。母爱是一种力量,它赋予我们勇气去追逐梦想,给予我们安全感和温暖的怀抱。
让我们感谢母亲的辛勤付出和无私奉献,向那些为了我们的幸福而默默奉献的母亲们表达崇高的敬意。她们是我们生命中最重要的人,是我们永远的依靠和支持。让我们珍惜与母亲在一起的每一刻时光,用爱和感激回报她们的付出。
昨天是三八妇女节,请你输出 thanks,mom 向自己的母亲表示感激。

输入格式

本题为填空题,无需输入即可作答。

输出格式

输出一个字符串表示答案。

解题代码

#include<iostream>
using namespace std;
int main()
{
	cout<<"thanks,mom"<<endl;
	return 0;
}

2.霓虹

问题描述

晚上,小蓝正无聊的走在大路上,小蓝所在的街区是一个带有赛博朋克风格的街区
他抬头一看,看到了很多霓虹灯牌。在其中的某一个店铺前,挂着一排的数字灯牌,每一个数字的显示都依靠7段 LED 管,亮着的灯管组成数字,具体来说如下图所示:
在这里插入图片描述
小蓝刚学过数字电路,他知道具体的工作原理如下:
在这里插入图片描述
在思考的过程中,他发现数字发生了变化。他想要知道,在数字变化的过程中,总共有多少根灯管的状态产生了变化?
例如,从显示数字0到显示数字6,会有一个灯管熄灭,一个灯管点亮,那么总共有两根灯管发生了变化。
具体来说,当前的数字串是 A,一秒钟之后,数字串变成了 B,小蓝想知道,在数字跳转的过程中,有多少个灯管的状态发生了变化。

输入格式

输入共两行,包含两个等长字符串。
第一行包含一个字符串 S(|S| <= 10^5),代表一开始的数字串。
第二行包含一个字符串 T(|T| <=10^5),代表跳变后的数字串。

输出格式

一个整数,代表跳变过程中变化的灯管数量,

样例输入

01
56

样例输出

9

说明

跳变过程如题干中的图片,
0 → 5 变化了 3根灯管,1 → 6变化了 6 根灯管,共变化 9根灯管。

解题代码

#include <iostream>
using namespace std;
int cntChange(int a[],int b[])
{
  int cnt=0;
  for(int i=0;i<7;i++)
  {
    if(a[i]!=b[i])
    {
      cnt++;
    }
  }
  return cnt;
}
//亮为1,不亮为0
void setLight(int num,int x[])
{ 
  if(num==0)
  {
    for(int i=0;i<6;i++)
    {
      x[i]=1;
    }
     return;
  }
  if(num==1)
  {
    x[1]=1;
    x[2]=1;
     return;
  }
  if(num==2)
  {
    x[0]=1;
    x[1]=1;
    x[3]=1;
    x[4]=1;
    x[6]=1;
     return;
  }
  if(num==3)
  {
       x[0]=1;
    x[1]=1;
    x[2]=1;
    x[3]=1;
    x[6]=1;
     return;
  }
    if(num==4)
    {
       x[1]=1;
    x[2]=1;
    x[5]=1;
    x[6]=1;
    return;
  }
    if(num==5)
    {
       x[0]=1;
    x[2]=1;
    x[3]=1;
    x[5]=1;
     x[6]=1;
    return;
  }
      if(num==6)
      {
       x[0]=1;
    x[2]=1;
    x[3]=1;
    x[4]=1;
    x[5]=1;
     x[6]=1;
    return;
  }
      if(num==7)
      {
       x[0]=1;
       x[1]=1;
    x[2]=1;
    return;
  }
      if(num==8)
      {
       x[0]=1;
       x[1]=1;
    x[2]=1;
  x[3]=1;
       x[4]=1;
    x[5]=1;
      x[6]=1;
    return;
  }
    if(num==9)
    {
       x[0]=1;
       x[1]=1;
    x[2]=1;
  x[3]=1;
    x[5]=1;
      x[6]=1;
    return;
  }
}
int main()
{
  int cnt=0;
  string S,T;
  cin>>S>>T;
  for(int i=0;i<S.size();i++)
  {
    int a[7]={0};
    setLight(int(S[i]-'0'),a);
    int b[7]={0};
    setLight(int(T[i]-'0'),b);
    cnt+=cntChange(a,b);
  }
  cout<<cnt;
  return 0;
}

3.奇偶排序

问题描述

小蓝所在的王国名为偶数王国,在他们王国中数字的比较通常按以下步骤进行:
如果两个数字的奇偶性不同,那么偶数一定大于奇数。和
。如果两个数字的奇偶性相同,则比较它们的实际数值大小。
现在给你一个正整数数组 A,请你输出按照偶数王国规则从小到大排序后的 A。

输入格式

第一行输入一个整数 N(1 <=N <= 10^3)表示数组 A 的长度。
第二行输入N个整数 A1,A2,A3,···,AN(1 <= Ai <= 10^5)表示数组 A。

输出格式

输出一行 N 个整数表示答案。

样例输入

5
1 2 3 4 5

样例输出

1 3 5 2 4

解题代码

#include<iostream>
#include<algorithm>
using namespace std;
int a[1005];
bool cmp(int x,int y)
{
    int r1=x%2;
    int r2=y%2;
    if(r1!=r2) return r1==1;
    else return x<y;

}
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    cin>>a[i];
    sort(a,a+n,cmp);
    for(int i=0;i<n;i++)
    cout<<a[i]<<" ";
    return 0;
}

4.可结合的元素对

问题描述

小蓝和小桥是蓝桥学院中学业成绩最好的两位同学。一天,小蓝向小桥提出了一个问题,希望小桥能够展示她最新学到的知识。问题是这样的:
给定一个长度为 N 的数组 A,如果一对下标(i,j)满足以下规则,那么称它们为可结合的元素对:
1≤i<j≤N
lowbit(ai + a¡)= Qi + aj
其中 lowbit(x)表示x的二进制表示中最低位的1的值。小蓝希望小桥能够计算出数组 A 中可结合的元素对的数量,但小桥无法解决这个问题,只能请你帮忙了。

输入格式

第一行输入一个整数 N(2 < N < 105)表示数组 A 的长度。
第二行输入 N 个整数 A1,A2,A3,···,AN(1 ≤ A¡ < 10^9)表示数组 A。

输出格式

输出一个整数表示答案。

样例输入

5
2 4 6 7 8
1

解题代码

#include <iostream>
#include<map>
#include<algorithm>
#define int long long
using namespace std;

const int N = 1e5 + 10;
int a[N];

signed main()
{
  int n;
  cin >> n;
  for(int i = 1 ; i <= n ; i++) cin >>a[i];
  sort(a + 1 , a + n + 1);
  map<int , int> m;
  int ans = 0;
  for(int i = 1 ; i <= n ; i++)
  {
    for(int j = 1 ; j <= 31 ; j++)
    {
      int k = (1 << j) - a[i];
      if(k <= 0) continue;
      if(m.find(k) != m.end()) ans += m[k];
    }
    m[a[i]]++;
  }
  cout << ans << endl;
  return 0;
}

在蓝桥王国,流传着一个古老的传说:在怪兽谷,有一笔由神圣骑士留下的宝藏。
小蓝是一位年轻而勇敢的冒险家,他决定去寻找宝藏。根据远古卷轴的提示,如果要找到宝藏那么需要集齐n滴兽之泪,同时卷轴中也记载了,每击败一次怪物,就能够收集一滴兽之泪。
小蓝知道,这些怪物并非泛泛之辈,每一只都拥有强大的力量和狡猾的技巧。每一只怪物都有它独特的弱点和对策,小蓝必须谨慎选择战斗的策略和使用的能量。
在怪兽谷中,有k只怪兽。对于第i只怪兽,第一次击败他需要xi点能量,后续再击败他需要yi点能量,由于怪兽吃了亏,所以有所准备,可以得到yi>xi。在挑战过程中,前k-1只怪兽可以随意挑战,但是第k只怪兽是怪兽之王,如果要挑战第k-1只怪兽,那么对于前 k-1 只怪兽都要击败至少一次。
小蓝想知道,如果要集齐 几 滴兽之泪,那么至少需要多少能量。

输入格式

第一行包含两个整数 k 和 n (2 <= k<= 10^5 , 1 <= n <= 2x10^5),表示怪物的数量和需要收集的兽之泪的数量。
接下来k行,每行包含两个整数 xi 和 yi(1 <= xi <= yi <= 10^9),表示第i只怪物第一次和后续击败所需的能量。

输出格式

输出一个整数,表示小蓝至少需要多少点能量才能收集完成。

样例输入

3 4
2 4
4 5
1 1

样例输出

8

说明

一种可行的方案是:
1.第一次选择 1 号怪物,消耗能量 2。
2.第二次选择 2 号怪物,消耗能量 4。
3.由于 1,2 都已经击败一次,所以可以选择3号,第三次选择 3号怪物,消耗能量 1。
4.第四次选择 3 号怪物,消耗能量 1。

#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
int k,n,mind = 1e9;
const int N = 200010;
long long res1,res2,res;
int x[N],y[N];
int main()
{
  // 请在此输入您的代码
  ios ::sync_with_stdio(false);
  cin.tie(0),cout.tie(0);
  priority_queue<PII> q;
  cin >> k >> n;
  for (int i = 0;i < k;i++)
{  
  cin >> x[i] >> y[i];
  res2 += x[i];
  mind = min(mind,y[i]);
}
    for (int i = 0;i < k-1;i++)
    q.push({-x[i],i});
//分类讨论
//不挑战最后一个
  int tm = n;
  while(tm--)
  {
    PII t = q.top();q.pop();
    q.push({-y[t.second],t.second});
     res1 += -t.first;
  }
  
//挑战最后一个
  if (n >= k)
  {
    n -= k;
    res2 += (long long)mind * n;
  }
  res = min(res1,res2);
  cout << res;
  return 0;
}

6.矩阵X

问题描述

小蓝面对一个 n * m 的矩形 D,其中每个位置(i,j)上都有一个元素 xi,j。
我们定义两个函数 f(D)、g(D),f(D)的值为矩阵 D 的所有元素的和值,g(D)为矩阵 D 的极差,即矩阵中的最大值减去最小值。
他需要在这个矩形中选择一个 n’ * m’的连续子矩阵,记为矩阵 D’’,他希望选择的连续子矩阵 D’能够使得 f(D’)xg(D’)最大化。
小蓝知道你很聪明,于是他把问题交给了你,希望你回答他最大化的值是多少
连续子矩阵:是在原矩阵选取部分连续行、连续列所组成的新矩阵。

输入格式

第一行包含四个整数 n,m,n’,m’(nxm<106,1<n’<n,1<m’<m),表示矩形的行数和列数,以及你需要选择的子矩阵的行数和列数。
接下来 几 行,每行包含 m 个整数,表示矩形中每个位置的元素值 i,j(l < xi.j< 10^6)。
输入量较大,建议采用较快的输入输出方式。

输出格式

一个整数,代表最大化的值。

样例输入

4 4 2 2
1 2 3 3
2 3 4 5
1 1 3 5
1 7 2 4

样例输出

78

说明

选择的连续子矩阵如下图黄色部分所示:
f(D’) = 13,g(D’)=6。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值