蓝桥杯——第 5 场 小白入门赛(c++详解!!!)

文章目录

  • 1 十二生肖
    • 基本思路:
  • 2 欢迎参加福建省大学生程序设计竞赛
    • 基本思路:
    • 代码:
  • 3 匹配二元组的数量
    • 基本思路:
    • 代码:
  • 4 元素交换
    • 基本思路:
    • 代码:
  • 5 下棋的贝贝
    • 基本思路:
    • 代码:
  • 6 方程
    • 思路:
    • 代码:


1 十二生肖

基本思路:

  • 签到题! 龙 -> 5

2 欢迎参加福建省大学生程序设计竞赛

基本思路:

  • 一道排序的题,先按题数排序,题树相等时,按罚时排序

代码:

#include<bits/stdc++.h>
using namespace std;#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define endl "\n"
#define int long long 
const int N = 1e6+10, INF=1e18+10;
struct Node{int x,y;
};
vector<Node> a;
bool cmp(Node xx,Node yy){if(xx.x!=yy.x)return xx.x>yy.x;return xx.y<yy.y;
}void solve(){int n; cin>>n;for(int i=1;i<=n;i++){int x,y; cin>>x>>y;a.push_back({x,y});}sort(a.begin(),a.end(),cmp);int num=0,prex=-1,prey=-1;for(auto i:a){//计算不相同的次数if(i.x==prex&&i.y==prey) continue;num++;prex=i.x; prey=i.y;}cout<<num;
} signed main(){IOS;int T=1;
//	cin>>T;while(T--){solve();}return 0;
}

3 匹配二元组的数量

基本思路:

  • 一对二元组(i,j)下标需要满足两个条件,一个是i<j,另一个是ai/j==aj/i. 对于第二个条件,我们不妨变一下形,得到aii == ajj.
  • 每个数的值都乘以它的下标(下标从1开始),问题就变成了找到有多少个数相等,从这些数中任意选出两个组成一个匹配二元组,这不就是组合数吗,答案加上每个数个数的C(n,2),可以用哈希统计每个数有多少个!

代码:

#include<bits/stdc++.h>
using namespace std;#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define endl "\n"
#define int long long 
const int N = 1e6+10, INF=1e18+10;
unordered_map<int,int> mp;
int n,ans;void solve(){cin>>n;vector<int> a(n+1);for(int i=1;i<=n;i++)cin>>a[i],mp[i*a[i]]++;for(auto i:mp)ans+=i.se*(i.se-1)/2;cout<<ans;} signed main(){IOS;int T=1;
//	cin>>T;while(T--){solve();}return 0;
}

4 元素交换

基本思路:

  • 2*N的二进制数组,其中0、1的个数各占一半,要求交换任意两个元素,使得最后的数组不存在连续的0或1
  • 我们可以发现最后数组只可能有两种状态:
  • 一个状态是010101…01
  • 另一个状态是101010…10
  • 我们只需统计当前数组与目标数组(目标数组为以上两种状态中的一种)有多少个不同的元素,假设有x个不同的元素,那么x/2即为操作次数,为什么呢?因为每交换一次,就有两个元素回到正确的位置。
  • 最后我们只需取两种情况中的最小值,即为最小操作次数!

代码:

#include<bits/stdc++.h>
using namespace std;#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define endl "\n"
#define int long long 
const int N = 1e6+10, INF=1e18+10;
unordered_map<int,int> mp;
int ans=0;void solve(){int n;cin>>n;vector<int> a(2*n+1),b(2*n+1),c(2*n+1);for(int i=1;i<=2*n;i++){b[i]=0,c[i]=0;}for(int i=1;i<=2*n;i++)cin>>a[i];for(int i=1;i<=2*n;i++)//构造两个目标数组,其实也可以不用实现,判断奇偶即可if(i&1) b[i]=1;else c[i]=1;
//	for(int i=1;i<=2*n;i++) cout<<b[i]<<' ';cout<<endl;
//	for(int i=1;i<=2*n;i++) cout<<c[i]<<' ';cout<<endl;int ans=INF,n1=0,n2=0;for(int i=1;i<=2*n;i++){if(a[i]!=b[i]) n1++;if(a[i]!=c[i]) n2++;}cout<<min(n1/2,n2/2);
} signed main(){IOS;int T=1;
//	cin>>T;while(T--){solve();}return 0;
}

5 下棋的贝贝

基本思路:

  • 首先我们需要理解题意,两个点坐标的曼哈顿距离等于1,这两点就是邻居!求出所有棋子邻居数量总和的最大值是多少?
  • 画图的可能会更直观些在这里插入图片描述
  • 有图可以发现,我们更倾向于构造正方形,这样能才能保证邻居数量总和最大
  • 每个棋子的最多的邻居是4个,即上下左右都是邻居。还可以发现处于边界位置的方块可能有一个邻居,两个邻居或者三个邻居。
  • 我们不妨假设每个棋子都有4个邻居,那么所有棋子邻居数量总和就为4n,然后在减去每个棋子多出来的邻居,由图不难发现,只有处于边界的棋子的邻居数量是少于4的。
  • 我们知道如果是完整的矩形,位于矩形四个角的棋子会有2个邻居,其余处于边界的棋子都有3个邻居。我们可以把缺的部分补成一个矩形!那么多出来的邻居总数=矩形的长2+矩形的宽2。结合示意图模拟一下不难发现补出来的的棋子不会对多出的邻居总数产生影响。

代码:

void solve(){int n; cin>>n;int l,h,m;m=sqrt(n);//可以拼凑出的最大的正方形的边长 l=h=m;if(l*h<n) l++;//矩形长 if(l*h<n) h++;//矩形宽 cout<<4*n-2*l-2*h;
} 

6 方程

思路:

  • 我们直到了x+1/x = k, 求 x^(n) + 1/(x^n)
  • 我们不妨设f(n)= x^(n) + 1/(x^n) 是关于x的函数
  • 以下我粗糙的证明了一下递推公式:
    在这里插入图片描述
  • 我们虽然找到了递推公式,但是发现n,k的范围都是1e9,直接一项一项求的话肯定会超时的!这时我们就需要矩阵快速幂来优化!f(1)=k , f(2)=k*k-2; 构建矩阵第一行:(0,-1) 第二行(1,k)推得f(2),f(3)

代码:

#include<bits/stdc++.h>
using namespace std;#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define endl "\n"
#define int long long 
const int N = 2e2+10, p=1e9+7;
int n=2,f[N+1],a[N+1][N+1];void aa(){//a*=a long long w[N+1][N+1];//临时存放a*a memset(w,0,sizeof(w));for(int i=1;i<=n;i++)for(int k=1;k<=n;k++)if(a[i][k])//优化,a[i][k]不为0 for(int j=1;j<=n;j++)if(a[k][j])//优化 w[i][j]+=a[i][k]*a[k][j],w[i][j]%=p;memcpy(a,w,sizeof(a));//放回a 
}void fa(){//f*=aint w[N+1];memset(w,0,sizeof(w));for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)w[i]+=f[j]*a[j][i],w[i]%=p;memcpy(f,w,sizeof(f));
}void matrixpow(int k){//矩阵快速幂 while(k){if(k&1) fa();//f*=a;aa();//a*=a;k>>=1;}
}void solve(){int m,k;cin>>m>>k;f[1]=k,f[2]=((k*k-2)%p+p)%p;//f[1],f[2]  A^(m-1)  f[m] f[m+1]a[1][1]=0,a[1][2]=-1;//构建矩阵A a[2][1]=1,a[2][2]=k;matrixpow(m-1);//移m-1位 cout<<f[1]<<endl;//f[1]存的即为第m项 
} signed main(){
//	IOS;int T=1;cin>>T;while(T--){solve();}return 0;
}
/*
1
2 22
*/

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

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

相关文章

春运一票难求,候补抢票显威,如何设计一个候补订单系统?

春运一票难求&#xff0c;候补官方抢票 最近春节火车一票难求&#xff0c;12306系统的候补购票是一种官方支持的抢票方式。在首日票已售罄时&#xff0c;立即提交候补请求&#xff0c;系统会优先考虑候补乘客的需求。根据成功率灵活选择是否候补购票。 当旅客在12306网站购票&…

【程序设计竞赛】竞赛中的细节优化

必须强调下&#xff0c;以下的任意一种优化&#xff0c;都应该是在本身采用的算法没有任何问题情况下的“锦上添花”&#xff0c;而不是“雪中送炭”。 如果下面的说法存在误导&#xff0c;请专业大佬评论指正 读写优化 C读写优化——解除流绑定 在ACM里&#xff0c;经常出现…

Spring Cloud Gateway 网关路由

一、路由断言 路由断言就是判断路由转发的规则 二、路由过滤器 1. 路由过滤器可以实现对网关请求的处理&#xff0c;可以使用 Gateway 提供的&#xff0c;也可以自定义过滤器 2. 路由过滤器 GatewayFilter&#xff08;默认不生效&#xff0c;只有配置到路由后才会生效&#x…

《CSS 简易速速上手小册》第3章:CSS 响应式设计(2024 最新版)

文章目录 3.1 媒体查询基础&#xff1a;网页的智能眼镜3.1.1 基础知识3.1.2 重点案例&#xff1a;适应三种设备的响应式布局3.1.3 拓展案例 1&#xff1a;改变字体大小3.1.4 拓展案例 2&#xff1a;暗模式适配 3.2 响应式图片和视频&#xff1a;让内容自由呼吸3.2.1 基础知识3.…

线性代数的本质——1 向量

向量是线性代数中最为基础的概念。 何为向量&#xff1f; 从物理上看&#xff0c; 向量就是既有大小又有方向的量&#xff0c;只要这两者一定&#xff0c;就可以在空间中随便移动。 从计算机应用的角度看&#xff0c;向量和列表很接近&#xff0c;可以用来描述某对象的几个不同…

力扣刷题之旅:高阶篇(五)—— 网络流算法:最大流与最小割

力扣&#xff08;LeetCode&#xff09;是一个在线编程平台&#xff0c;主要用于帮助程序员提升算法和数据结构方面的能力。以下是一些力扣上的入门题目&#xff0c;以及它们的解题代码。 --点击进入刷题地址 引言 在算法领域中&#xff0c;网络流算法是一个重要且实用的工…

Python使用kruskal算法实现最小生成树

假如有多台计算机组成的局域网,不同计算机之间是使用光纤来连接的,如果把计算机看成是一个简单的节点,连接计算机的光纤看成是一条边,那这个局域网就可以抽象成为一个无向图: 添加图片注释,不超过 140 字(可选) 而对于这个图中的每个圆圈代表的是一个计算机,直线代表…

【北邮鲁鹏老师计算机视觉课程笔记】06 corner 局部特征

【北邮鲁鹏老师计算机视觉课程笔记】06 corner 局部特征 1 局部特征的任务牵引&#xff1a;全景拼接 ①提取特征 ②匹配特征 ③拼接图像 我们希望特征有什么特性&#xff1f; ①可重复性 ②显著性 ③计算效率和表达紧凑性 ④局部性 2 特征点检测的任务 3 角点 在角点&#…

Python爬虫之Ajax数据爬取基本原理

前言 有时候我们在用 requests 抓取页面的时候&#xff0c;得到的结果可能和在浏览器中看到的不一样&#xff1a;在浏览器中可以看到正常显示的页面数据&#xff0c;但是使用 requests 得到的结果并没有。这是因为 requests 获取的都是原始的 HTML 文档&#xff0c;而浏览器中…

Kafka 之生产者(Producer)

目录 一. 前言 二. 生产消息 三. 幂等和事务 四. send() 发送消息 五. 原理解析 一. 前言 Kafka生产者是一个应用程序&#xff0c;它负责向 Kafka 主题发送消息。这些消息可以用于多种目的&#xff0c;如记录用户活动、收集物联网设备数据、保存日志消息或缓存即将写入数据…

去空行小工具Html + Javascript

这是一个平常用到的小工具&#xff0c;为了节省屏幕空间把空行去掉&#xff0c;为了怕要用的时候找不到故记录在此。 效果图 网页版&#xff0c;放在浏览器里就可以用 <!doctype html> <html><head><meta charset"utf-8"><title>去…

java微服务面试篇

目录 目录 SpringCloud Spring Cloud 的5大组件 服务注册 Eureka Nacos Eureka和Nacos的对比 负载均衡 负载均衡流程 Ribbon负载均衡策略 自定义负载均衡策略 熔断、降级 服务雪崩 服务降级 服务熔断 服务监控 为什么需要监控 服务监控的组件 skywalking 业务…