【蓝桥】蓝桥小白入门赛8

简介: A、签到 B、结论性排序 C、找规律+暴力 D、找规律+递推+贪心 E、找规律+贪心 F、dp

A、坤星球

签到题

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'

int main() {
   
   
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cout << 2024 * 2.5 << endl;
    return 0;
}

B、 二进制王国

两个字符串a,b按字典序排序,判断a+b和b+a的关系即可,自定义一个bool类型的cmp函数,然后return a+b<b+a 。使用sort()函数对字符串进行排序。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
const int N = 2e5 + 10;
string s[N];

bool cmp(string a, string b) {
   
   
    return a + b < b + a;
}

int main() {
   
   
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int n; cin >> n;
    for (int i = 1; i <= n; i++) cin >> s[i];
    sort(s + 1, s + n + 1, cmp);
    for (int i = 1; i <= n; i++) cout << s[i];
    return 0;
}

C、 djwcb

找规律。我们依次枚举0~9每个数的n次幂,会发现每个数的n次幂的个位数都有以4个为一周期的规律。首先我们将x%=10(因为其实只要看个位数的变化就行)。同时因为题目中的p很大,我们用字符串存p。遍历字符串p将字符串p转成整数同时%4,用res记录结果。如果最后res=0,说明正好整除,我们就让res=4。最后按照题意求pow(x,res)%10即可。
image.png

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'

void solve(){
   
   
    int x; string p;
    cin>>x>>p;
    x%=10;
    int res=0;
    for(int i=0;i<p.size();i++){
   
   
        res=(res*10+p[i]-'0')%4;
    }
    if(res==0) res=4;
    int ans=pow(x,res);
    cout<<ans%10<<endl;
}

int main(){
   
   
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t; cin>>t;
    while(t--){
   
   
        solve();
    }
    return 0;
}

D、 求解线性方程组

找规律,通过递推找出关系式x[i]=a[i-1]-x[i-1]-x[i-2]。因为xi只能为0或1,所以我们让x1=0或x1=1分类讨论这两种情况即可。因为要求字典序最小的解,我们先讨论x[1]=0的情况,如果通过递推其中某个x[i]不为0且x[i]不为1,说明x1=0的方案不可行,而题目又保证线性方程组至少存在一组解且合法,那么说明此时x1=1的方案可行。最后输出满足题意的那一种方案即可。
image.png

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
const int N=2e5+10;
int n,a[N],x[N],y[N];

int main(){
   
   
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    x[1]=0;
    int f=0;
    for(int i=2;i<=n;i++){
   
   
        x[i]=a[i-1]-x[i-1]-x[i-2];
        if(x[i]!=0&&x[i]!=1){
   
   
            f=1;
            break;
        }
    }
    y[1]=1;
    for(int i=2;i<=n;i++){
   
   
        y[i]=a[i-1]-y[i-1]-y[i-2];
    }
    if(!f){
   
   
        for(int i=1;i<=n;i++) cout<<x[i]<<" ";
        cout<<endl;
    }else{
   
   
        for(int i=1;i<=n;i++) cout<<y[i]<<" ";
        cout<<endl;
    }
    return 0;
}

E、 美丽圆环

给定两个操作,操作1是让数组上的任意数字更改为任意整数,操作2交换数组上任意两个数的位置。题意是让一个数ai左右两侧的数其中一个大于等于ai,另一个小于等于ai。求操作1的最小次数。

首先我们对原数组进行排序。此时除了,首尾两个数,其余数都满足其左右两侧数一个数大于等于ai,另一个数小于等于ai。

我们再进行分类讨论(这里数组下标为1~n,ans表示操作1的次数):

1、如果数组长度n为2,那么如果a1=a2,不需要进行操作,ans=0;否则a1!=a2,需要进行一次操作让a1=a2,ans=1。

2、n>2的情况,因为已经排序了。如果a1!=a2(此时a1<a2,a1<a[n],需要将a1变成a[n]才符合题意,此时操作数ans++),如果a[n-1]!=a[n](此时a[n-1]<a[n],a1<a[n],需要将a[n]变成a[n-1]才符合题意,此时操作数ans++)。需要注意的是,如果a2=a3或者a[n-2]=a[n-1],只需要改变a1,用操作2交换位置即可(如1 2 2 4 5 变成 5 2 2 4 5),此时令ans=1。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'

void solve(){
   
   
    int n; cin>>n;
    vector<int> a(n+1);
    for(int i=1;i<=n;i++) cin>>a[i];
    sort(a.begin()+1,a.end());
    int ans=0;
    if(n==2){
   
   
        if(a[1]!=a[2]) ans=1;
    }else{
   
   
        if(a[1]!=a[2]) ans++;
        if(a[n-1]!=a[n]) ans++;
        if(ans==2){
   
   
            if(a[2]==a[3]||a[n-2]==a[n-1]) ans=1;
        }
    }
    cout<<ans<<endl;
}

int main(){
   
   
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t; cin>>t;
    while(t--){
   
   
        solve();
    }
    return 0;
}

F、小蓝的跳跃

dp(很经典的跳格子问题的变式)。记录到最后一个点的最小值和最大值,如果x在这个区间内就是可以调整(如果比x小了,就多走一些+1,少走一些-1;如果比x大了,多走一些-1,少走一些+1),可以到达x。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'

void solve(){
   
   
    int n,x; cin>>n>>x;
    vector<int> a(n+5);
    for(int i=1;i<=n;i++) cin>>a[i];
    vector<int> b(n+5),c(n+5);
    b[1]=c[1]=a[1];
    for(int i=2;i<=n+1;i++){
   
   
        b[i]=min(b[i-1],b[i-2])+a[i];
        c[i]=max(c[i-1],c[i-2])+a[i];
    }
    if(x>=b[n+1]&&x<=c[n+1]) cout<<"Yes"<<endl;
    else cout<<"No"<<endl;
}

int main(){
   
   
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t; cin>>t;
    while(t--){
   
   
        solve();
    }
    return 0;
}

相关文章
|
2月前
|
机器学习/深度学习 人工智能 Java
优先队列 priority_queue详解
说到,priority_queue优先队列。必须先要了解啥是堆与运算符重载(我在下方有解释)。否则只知皮毛,极易忘记==寸步难行。但在开头,还是简单的说下怎么应用。
667 1
|
4月前
|
数据采集 人工智能 测试技术
LLM-as-a-judge有30%评测偏差?这篇论文给出修复方案
KRAFTON AI研究揭示,用LLM评估LLM存在高达30%的系统性偏差,导致性能排名失真。评判模型的敏感性与特异性不均衡,使分数偏离真实水平。论文提出基于Rogan-Gladen估计器的校正方法,结合小规模标注数据校准偏差,并量化不确定性,提升评估可靠性。结果表明,未经校正的排行榜可能误导研发方向。评估自动化需以统计严谨为前提,校准不是可选而是必需。
422 5
LLM-as-a-judge有30%评测偏差?这篇论文给出修复方案
|
2月前
|
C语言 C++ Windows
VC++ 2010学习版(64bit)安装与教程(Windows版,含解压+管理员运行+自定义路径)
Microsoft Visual C++ 2010 Express(学习版)是全国计算机二级C/C++考试指定开发环境,专为初学者设计:语法高亮、实时错误提示、界面简洁。含64位安装包、详细图文安装指南及正版注册密钥,助你快速上手编程学习。(239字)
1789 0
|
6月前
|
人工智能
1688新灯塔体系全面升级!深度解析三大巨变与商家应对策略
11月7日,1688平台正式发布了“新灯塔”服务体系的全新升级公告。此次升级并非微调,而是从指标模型、权重分配到考核精度的一次系统性重构,旨在更精准地衡量与驱动商家服务能力的提升。本文将为您深度剖析此次升级的核心变化,并为企业提供切实可行的运营建议。
|
存储 自然语言处理 自动驾驶
基于LLM打造沉浸式3D世界
阿里云数据可视化产品DataV团队一直在三维交互领域进行前沿探索,为了解决LLMs与3D结合的问题,近期在虚幻引擎内结合通义千问大模型家族打造了一套基于LLM的实时可交互3D世界方案,通过自然语言来与引擎内的3D世界进行交互。
1258 160
|
存储 缓存 监控
分布式监控CAT服务端的本地部署
CAT(Central Application Tracking),是美团点评基于 Java 开发的一套开源的分布式实时监控系统。美团点评基础架构部希望在基础存储、高性能通信、大规模在线访问、服务治理、实时监控、容器化及集群智能调度等领域提供业界领先的、统一的解决方案,CAT 目前在美团点评的产品定位是应用层的统一监控组件,在中间件(RPC、数据库、缓存、MQ 等)框架中得到广泛应用,为各业务线提供系统的性能指标、健康状况、实时告警等服务。
1191 0
分布式监控CAT服务端的本地部署
|
存储 监控 微服务
微服务和单体架构是两种不同的软件架构风格,每种都有其自身的优缺点
【1月更文挑战第1天】微服务和单体架构是两种不同的软件架构风格,每种都有其自身的优缺点
442 0
|
存储 Serverless C++
【C++入门到精通】哈希 (STL) _ unordered_map _ unordered_set [ C++入门 ]
【C++入门到精通】哈希 (STL) _ unordered_map _ unordered_set [ C++入门 ]
538 1
|
缓存 资源调度 JavaScript
Vue3+TS+Vite开发组件库并发布到npm
**vue-amazing-ui 组件库** 是一个基于 Vue 3 的高质量 UI 组件库,提供了丰富的组件和工具函数。该库已发布至 npm,可通过 `pnpm i vue-amazing-ui`、`yarn add vue-amazing-ui` 或 `npm install vue-amazing-ui` 安装使用。组件包括按钮、面包屑、卡片、日期选择器等,同时提供了日期格式化、节流、防抖等实用工具函数。项目结构清晰,支持按需加载,并提供了详细的文档与在线预览。
459 1
Vue3+TS+Vite开发组件库并发布到npm