2024级新生数组字符串专题题解

news2024/12/26 10:44:41

一、题解:

1.A-[NOIP2005]校门外的树_24级新生数组字符串训练题· (nowcoder.com)

这题常见的解法有两种:

第一种是这道题我们可以直接按照题目意思枚举

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

int road[10010];

signed main()
{
    int l,m;
    cin>>l>>m;
    
    for(int i=1;i<=m;i++)
    {
        int l,r;
        cin>>l>>r;
        for(int i=l;i<=r;i++)road[i]=1;
    }
    
    int ans=0;
    for(int i=0;i<=l;i++)if(!road[i])ans++;
    cout<<ans;
    
    return 0;
}

第二种用了差分算法,这个算法与前缀和算法互逆关于算法的知识可以看一下这个视频:

STUACM-算法入门-前缀和与差分(含二维)_哔哩哔哩_bilibili

代码如下:

#include<algorithm>
#include<iostream>
#include<cstring>
#include<vector>
#include<map>
using namespace std;
typedef long long ll;
 
const int N=200010;
int a[N],b[N];
 
void insert(int x,int y)
{
    b[x]--;
    b[y+1]++;
}
 
void solve()
{
    int n,k;
    cin>>n>>k;
    while(k--)
    {
        int x,y;
        cin>>x>>y;
        insert(x,y);
    }
    
    int ans=0;
    for(int i=1;i<=n;i++)b[i]+=b[i-1];
    for(int i=0;i<=n;i++)if(b[i]<0)ans++;
    cout<<n+1-ans<<endl;
}
 
int main()
{
    int _;
    _=1;
    while(_--)
    {
        solve();
    }
    return 0;
}

2、B-比较月亮大小_24级新生数组字符串训练题· (nowcoder.com)

如果只有一天的话只能判断0和15这两个特殊元素,其他的都不能判断,如果有两天以上的话只用看最后两天可以了(这种情况只有14,15需要特判)。代码如下:

#include<iostream>
using namespace std;
 
int temp[1000];
 
int main()
{
    int n;
    cin>>n;
    
    for(int i=1;i<=n;i++)cin>>temp[i];
    
    if(n<=1)
    {
        if(temp[n]==15)cout<<"DOWN"<<endl;
        else if(temp[n]==0)cout<<"UP"<<endl;
        else cout<<-1<<endl;
    }
    else if(temp[n]==15&&temp[n-1]==14)cout<<"DOWN"<<endl;
    else if(temp[n]>temp[n-1])cout<<"UP"<<endl;
    else if(temp[n]<temp[n-1])cout<<"DOWN"<<endl;
    
    return 0;
}

3、C-数列下标_24级新生数组字符串训练题· (nowcoder.com)

方法一:按照题目意思模拟,用数组存储答案;

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

int a[10010],b[10010];

signed main()
{
    int n;
    cin>>n;
    
    for(int i=1;i<=n;i++)cin>>a[i];
    
    for(int i=1;i<=n;i++)
    {
        int temp=0;//判断是否有满足条件的数
        for(int j=i;j<=n;j++)
        {
            if(a[j]>a[i])
            {
                b[i]=j;
                break;
            }
        }
    }
    
    for(int i=1;i<=n;i++)cout<<b[i]<<" ";
    return 0;
}

方法二:可以用单调栈的方法写,有兴趣的同学可以自己去了解。

4、D-求逆序数_24级新生数组字符串训练题· (nowcoder.com)

本题根据数据范围判断可以有两种解法,第一种是根据题目暴力枚举O(n^2);

二是利用归并排序的特性求得O(nlogn);

第二种做法采用了分治的思想,非常经典,首先看归并排序的流程:

1.划分区间 [l,mid] ,[ mid+1,r];

2.递归排序(不断减小问题的规模)

3.归并,将左右两个区间合二为一;

一个逆序对是指一对数,其中前面的元素严格大于后面的数;那么根据归并排序的过程我们可以将逆序对分成三类:

1.两个数都在左边

2.两个数都在右边

3.两个数分别在左右两边 

其实质就是计算第三种逆序对,因为左右两边的逆序对随着递归最终都会分解成第三种情况。

方法二为基本归并排序算法

方法一代码:

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

int a[10010];

signed main()
{
    int n,ans=0;
    cin>>n;
    
    for(int i=1;i<=n;i++)cin>>a[i];
    
    for(int i=1;i<=n;i++)
    {
        for(int j=i+1;j<=n;j++)
        {
            if(a[i]>a[j])ans++;
        }
    }
    
    cout<<ans;
    return 0;
}

方法二代码:

#include<iostream>
using namespace std;
int ans=0;
 
int temp[2010],a[2022];
 
void merge_sort(int q[],int l,int r)
{
    if(l>=r)return ;
    int mid=(l+r)>>1;
    
    merge_sort(q,l,mid);
    merge_sort(q,mid+1,r);
    
    int i=l,j=mid+1,k=0;
    
    while(i<=mid&&j<=r)
    {
        if(q[i]>=q[j])ans+=mid-i+1,temp[k++]=q[j++];
        else temp[k++]=q[i++];
    }
    
    while(i<=mid)temp[k++]=q[i++];
    while(j<=r)temp[k++]=q[j++];
    
    for(int i=0,j=l;j<=r;j++,i++)q[j]=temp[i];
}
 
int main()
{
    int n;
    cin>>n;
    
    for(int i=0;i<n;i++)cin>>a[i];
    
    merge_sort(a,0,n-1);
    
    cout<<ans<<endl;
    
    return 0;
}

5、E-[NOIP2015]扫雷游戏_24级新生数组字符串训练题· (nowcoder.com)

注意要判断八个方向

#include<algorithm>
#include<iostream>
#include<cstring>
#include<vector>
#include<map>
using namespace std;
typedef long long ll;
 
const int N=110;
char f[N][N];
 
int dx[]={-1,0,1,0,1,1,-1,-1},dy[]={0,1,0,-1,1,-1,1,-1};
 
void check(int x,int y)
{
    int cnt=0;
    for(int i=0;i<8;i++)
    {
        int xx=x+dx[i],yy=dy[i]+y;
        if(f[xx][yy]=='*')cnt++;
    }
    f[x][y]='0'+cnt;
}
 
void solve()
{
    int a,b;
    cin>>a>>b;
    
    for(int i=1;i<=a;i++)
        for(int j=1;j<=b;j++)
            cin>>f[i][j];
    
    for(int i=1;i<=a;i++)
    {    
        for(int j=1;j<=b;j++)
        {
            if(f[i][j]!='*')check(i,j);
            printf("%c",f[i][j]);
        }
        cout<<endl;
    }
}
 
int main()
{
    int _;
    _=1;
    while(_--)
    {
        solve();
    }
    return 0;
}

6、A-[NOIP2008]笨小猴_24级新生数组字符串训练题 (nowcoder.com)

用数组记录所有出现过的字母的次数,排序得到答案,再判断质数(0不是质数)注意看清题目,只有是的时候输出答案,否则一律输出0;

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

int num[29];

bool isprime(int x)
{
    if(!x||x==1)return false;
    
    for(int i=2;i<=x/i;i++)
    {
        if(x%i==0)return false;
    }
    
    return true;
}

signed main()
{
    
    string s;
    cin>>s;
    
    int maxn=0,minn=1e12;
    
    for(int i=0;i<s.size();i++)
    {
        if(s[i]>='A'&&s[i]<='Z')s[i]+='a'-'A';
        num[s[i]-'a']++;
    }
    
    for(int i=0;i<=25;i++)
    {
        maxn=max(maxn,num[i]);
        if(num[i])minn=min(minn,num[i]);
    }
    
    int ans=maxn-minn;
    
    if(!isprime(ans)) cout<<"No Answer"<<endl<<0;
    else  cout<<"Lucky Word"<<endl<<ans;
    
    return 0;
}

7、B-数独合理吗?_24级新生数组字符串训练题 (nowcoder.com)

简单模拟,用一个数组记录数字出现的次数即可,记得每次检查前要初始化这个数组,代码如下:

#include<algorithm>
#include<iostream>
#include<cstring>
#include<vector>
#include<map>
using namespace std;
typedef long long ll;
 
const int N=10;
int shu[N][N],ha[10];
bool flag1=1,flag2=1,flag3=1;
 
void init()
{
    for(int i=1;i<=10;i++)ha[i]=0;
}
 
 
bool check3(int x,int y)
{
    for(int i=x;i<=x+2;i++)
        for(int j=y;j<=y+2;j++)
        {
            ha[shu[i][j]]++;
            if(ha[shu[i][j]]>1)return false;
        }
    return true;
}
 
void check1()
{
    for(int i=1;i<=9;i++)
    {
        init();
        for(int j=1;j<=9;j++)
        {
            ha[shu[i][j]]++;
            if(ha[shu[i][j]]>1)flag1=false;
        }
    }   
    
    for(int i=1;i<=9;i++)
    {
        init();
        for(int j=1;j<=9;j++)
        {
            ha[shu[j][i]]++;
            if(ha[shu[j][i]]>1)flag2=false;
        }
    }
}
 
void check2()
{
    for(int i=1;i<=9;i+=3)
        for(int j=1;j<=9;j+=3)
        {
            init();
            if(!check3(i,j))flag3=false;
        }    
}
 
void solve()
{
    
    for(int i=1;i<=9;i++)
        for(int j=1;j<=9;j++)
            cin>>shu[i][j];
 
    /*检查行和列*/
    check1();
    /*检查宫*/
    check2();
    
    if(flag1&&flag2&&flag3)cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
}
 
int main()
{
    int _;
    _=1;
    while(_--)
    {
        solve();
    }
    return 0;
}

8、珂朵莉的假toptree (nowcoder.com)

c++有个to_string函数很方便

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

signed main()
{
    int n;
    cin>>n;
    
    string s="";
    
    int cnt=0;
    for(int i=1;i<=1000;i++)
    {
        s+=to_string(i);
    }
    
    cout<<s[n-1];
    
    return 0;
}

9、D-[NOIP2012]Vigen&egrave;re 密码_24级新生数组字符串训练题 (nowcoder.com)

首先按照题目初始化密码表,然后根据规则去翻译即可。代码如下:

#include<iostream>
#include<cstring>
using namespace std;
const int N=100010;
 
char map[26][26];
char key[110],text[1010];
 
void init()
{
    for(int i=0;i<26;i++)
    {
        char base='A'+i;
        for(int j=0;j<26;j++)
        {
            char now=base+j;
            if(now-'A'>=26)now-=26;
            map[i][j]=now;
        }
    }
}
 
int main()
{
    init();
    
    cin>>key>>text;
    
    int l=strlen(key),ll=strlen(text);
    for(int i=0;i<ll;i++)
    {
        char a=key[i%l];
        char b=text[i];
        if(a>='a'&&a<='z')a+='A'-'a';
        if(b>='a'&&b<='z')b+='A'-'a';
        
        char ans;
        for(int j=0;j<26;j++)if(map[j][a-'A']==b)ans=j+'A';
        if(text[i]>='a'&&text[i]<='z')ans+='a'-'A';
        
        printf("%c",ans);
    }
    
    return 0;
}

有兴趣的同学还可以去试一下这道题:潜伏者 (nowcoder.com)

10、E-上三角矩阵判定_24级新生数组字符串训练题 (nowcoder.com)

设行数为i,那么要满足题目意思的话只要每行前i-1个元素全为0即可,否则不满足条件。

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

int f[11][11];

signed main()
{
    int n;
    cin>>n;
    
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        cin>>f[i][j];
    
    bool ff=1;
    
    for(int i=1;i<=n;i++)
        for(int j=1;j<=i-1;j++)
        {
            if(f[i][j])ff=0;
        }
    
    if(ff)cout<<"YES";
    else cout<<"NO";
    
    return 0;
}

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

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

相关文章

HarmonyOS开发实战( Beta5.0)DevEco Device Tool开发环境搭建实践

通常在嵌入式开发中&#xff0c;很多开发者习惯于使用Windows进行代码的编辑&#xff0c;比如使用Windows的Visual Studio Code进行OpenHarmony代码的开发。但当前阶段&#xff0c;大部分的开发板源码还不支持在Windows环境下进行编译&#xff0c;如Hi3516、Hi3518系列开发板。…

Django+Vue3前后端分离学习(五)(前端登录页面搭建)

1、如果需要使用组合式API&#xff0c;需要安装插件&#xff1a; npm install vite-plugin-vue-setup-extend --save-dev 在vite.config.js里配置&#xff1a; 首先导入: import VueSetupExtend from vite-plugin-vue-setup-extend 添加&#xff1a; 2、创建login.vue 然…

C语言刷题日记(附详解)(4)

一、选填部分 第一题: 下面四个选项中&#xff0c;均是不合法的用户标识符的选项是( ) A. A P_0 do B. float la0 _A C. b-a sizeof int D. b_a temp _123 思路提示&#xff1a;题中所问的是"不合法"的"用户标识符"&#xff0c;要记得&#xff0c;C…

4区升3区的“灌水王者”!7个月还未送审被人评为“小牌大耍”?急投学者注意

【SciencePub学术】本期&#xff0c;给大家介绍的是1本计算机类的SCI——《JOURNAL OF SUPERCOMPUTING》。 优点VS缺点 • 期刊投稿难度较小&#xff0c;接受率较高 • 国人投稿友好&#xff0c;且已经稳定检索了28年 • 去年由中科院4区升为3区 • 普遍反映这本期刊审稿周期…

项目总体框架

一.后端&#xff08;包装servlet&#xff09; 使用BaseServlet进行请求的初步处理&#xff08;利用继承进行执行这个&#xff09; 在BaseServlet中 处理请求的类型找到对象的方法&#xff0c;并使用注解找到参数名&#xff0c;执行参数自动注入。 package com.csdn.controlle…

JAVA数据导出为Excel

目录 一、导入依赖 二、使用的相关类 1、XSSFWorkbook 构造方法 创建表 操作表 保存表 样式和格式 日期处理 密码保护 其他 2、XSSFSheet 获取属性和信息 行操作 列操作 表的属性 合并单元格 保护表 页眉和页脚 注释 其它 3、XSSFRow 获取属性和信息 单…

Redis 常用命令总结

文章目录 目录 文章目录 1 . 前置内容 1.1 基本全局命令 KEYS EXISTS ​编辑 DEL EXPIRE TTL TYPE 1.2 数据结构和内部编码 2. String类型 SET GET MGET MSET SETNX INCR INCRBY DECR DECYBY INCRBYFLOAT 命令小结 内部编码 3 . Hash 哈希类型 HSET …

如何用python远程测试连接redis服务器

前提条件 A&#xff1a;操作机&#xff08;操作系统不限&#xff09; B&#xff1a;装有redis的服务器&#xff08;linux系统&#xff09; 而且需要配置redis服务器允许外部连接。这个一般是在redis的配置文件里修改相关选项。redis.conf或者6379.conf就是redis的配置文件 b…

备考MS office 二级

word 1、分页符 布局-分隔符-分节符-下一页&#xff1a;第二张可以不同纸张大小、方向等 2、调整宽度&#xff1a;新文字宽度&#xff08;字符宽度&#xff09; 中文版式 3、字符间距 4、文本转换为表格 1、把 || 替换为逗号&#xff0c;方便查找 5、首字下沉 插入 - 首字下沉…

ActiveMQ 反序列化漏洞复现(CVE-2015-5254)

一、漏洞前言 Apache ActiveMQ是美国阿帕奇&#xff08;Apache&#xff09;软件基金会所研发的一套开源的消息中间件&#xff0c;它支持Java消息服务&#xff0c;集群&#xff0c;Spring Framework等。Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞&#xff0c;该漏洞源于程…

一篇python常见的Pandas的数据功能的使用

当我们学习了如何使用 Pandas 进行数据的导入与导出,这为我们后续的数据处理打下了基础.此次我们将重点讨论数据选择与过滤.通过掌握这一部分的知识,你将能够轻松地从复杂的数据集中提取出所需的信息.接下来,我们将通过一些实例来逐步了解这些操作. 数据选择 数据选择主要是针…

二分查找 ,看这一篇就够了

什么是二分查找&#xff1f; 二分查找&#xff08;Binary Search&#xff09;是一种高效的查找算法&#xff0c;适用于在有序数组中查找特定元素。其基本思想是通过逐步缩小查找范围&#xff0c;每次将查找区间减半&#xff0c;从而大大提高查找效率。二分查找的时间复杂度为O(…

B样条曲线测试

实验效果&#xff1a; 绿色为A*规划的路径&#xff0c;蓝色为Bspline曲线 介绍 对A* 生成的路径进行B样条&#xff08;A* 和Bspline都是佬们写好的&#xff0c;我直接拿来用&#xff09; 样条曲线相关可参考文章&#xff1a;详解样条曲线&#xff08;上&#xff09;&#x…

基于LaMA-Factory微调llama3.1-8B

大模型的训练目前主要分为Pre-training和Post-training&#xff0c;受限于资源算力等原因&#xff0c;实际工作中更多用到的是SFT。 对于普通用户来说SFT仍然具备较高的门槛&#xff0c;需要了解一定的理论基础&#xff0c;准备用于微调的数据&#xff0c;由于不同基座模型相应…

xilinx通用RAM或者FIFO设计

1、在 Vivado 中&#xff0c;XPM&#xff08;Xilinx Parameterized Macros&#xff09;是 Xilinx 提供的一组预定义的、参数化的硬件描述语言 (HDL) 宏模块&#xff0c;用于简化设计流程和提高设计效率。XPM 模块通常用于实现常见的功能&#xff0c;比如存储器&#xff08;RAM/…

PWR电源控制(低功耗模式)

1 PWR简介 1 程序后面是空循环&#xff0c;即使不用也会耗电&#xff0c;所以有了低功耗&#xff08;例如遥控器&#xff09; 2 也要保留唤醒模式&#xff0c;如串口接收数据中断唤醒&#xff0c;外部中断唤醒&#xff0c;RTC闹钟唤醒&#xff0c;在需要工作是&#xff0c;ST…

docker装大米cms(damicms)各种cms可用相同办法

1.docker pull 拉取镜像文件 docker pull medicean/vulapps:base_lamp 2.使用docker运行 docker run -d -p 8080:80 medicean/vulapps:base_lamp 3将需要搭建的 CMS 项目源码放到 kali 中&#xff0c;这里以 damiCMS 为例 查看容器id docker ps 4进入dmCMS 所在目录&#…

基于Java+SpringBoot+Vue的新闻稿件管理系统

基于JavaSpringBootVue的新闻稿件管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1f345; 哈…

利用高德API获取整个城市的公交路线并可视化(四)

副标题&#xff1a;公共汽电车站点覆盖率——以厦门市公交线路为例 书接上回&#xff0c;我们有了公交的线路、站点数据&#xff0c;并同时对数据质量进行了校验&#xff0c;但是不同城市情况不同&#xff0c;需要看当地对公交交通数据的开放程度&#xff0c;部分城市建设的有…

Linux系统运行模式以及链接文件

一.Linux系统运行模式 如上图所示&#xff0c;可以使用runlevel这条命令去查看当前系统的运行模式。 如上图所示&#xff0c;可以使用这条命令使得机器以字符模式启动。 如上图所示&#xff0c;可以使用这条命令使得机器以图像化界面启动。 二.链接文件 链接文件类型&#xff…