第五届太原理工大学程序设计竞赛新生赛(初赛)题解

news2024/11/22 13:25:47

第五届太原理工大学程序设计竞赛新生赛(初赛)题解

时隔半年重做一次,还是有几道不会,,,,,

⭐️A.饿饿饭饭

题目:

在这里插入图片描述

🌟题解:

很简单,签个到输出谁饿了

代码:

#include<iostream>
using namespace std;
int main()
{
    string s; cin>>s;
    cout<<s<<":eeff";
}

⭐️B.扣点点

题目:
在这里插入图片描述

🌟题解:

hammer喜欢玩扣点点但太菜了理不清牌(doge),让你帮忙按一定顺序整理,典型的排序吧

代码:

1.这种字符串数组排序较为简单
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 15;
string s[N];
int main()
{
    int n; cin>>n;
    for(int i = 0;i<n;i++)   
    {
        char j[2];
        cin>>j[1]>>j[0];
        s[i] += j[0];
        s[i] += j[1];
    }
    sort(s,s+n);
    for(int i = 0;i<n;i++)  
    {
        cout<<s[i][1]<<s[i][0]<<' ';
    }
    return 0;
}
2.标记法
#include <iostream>
using namespace std;
const int N = 15;
int cnt[4][10]; 
int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; ++i) {
        int num;
        char s;
        cin >> num >> s;
        int id;
        if (s == 'B') id = 0;
        else if (s == 'C') id = 1;
        else id = 2;
        cnt[id][num]++;
    }
    for (int i = 0; i < 3; ++i) { 
        for (int j = 1; j <= 9; ++j) {
            for (int k = 0; k < cnt[i][j]; ++k) { //可能这里不好理解,就是看k+到比cnt这大就是cnt-反过来也可以写成while(cnt[i][j]--&&cnt>0)
                cout << j << (i==0 ? 'B' : i==1 ? 'C' : 'D') << " "; 
            }
        }
    }
    cout << endl;
    return 0;
}
3.自己写个结构体排序
#include<bits/stdc++.h>
using namespace std;
int n;
struct node{
    char x,y;
}a[15];
bool cmp(node q,node p){
    if(q.y!=p.y)return q.y<p.y;
    else return q.x<p.x;
}
string s;
int main(){
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>s;
        a[i].x=s[0];
        a[i].y=s[1];
    }
    sort(a,a+n,cmp);
    for(int i=0;i<n;i++){
        cout<<a[i].x<<a[i].y<<" ";
    }
}
4.利用mulimap性质(某孙神的)
#include <bits/stdc++.h>
using namespace std;
int main(){
    multimap<char,char>mp;
    multimap<char,char>ans;
    int n;
    cin>>n;
    while(n--){
        char ch;
        char temp;
        cin>>temp>>ch;
        mp.insert({temp,ch});
    }
    for(auto it=mp.begin();it!=mp.end();it++){
        ans.insert(pair<char,char>(it->second,it->first));
    }
    for(auto it=ans.begin();it!=ans.end();it++){
        cout<<it->second<<it->first<<" ";
    }
    return 0;
}

⭐️String problem

题目:

在这里插入图片描述

🌟题解:

也很简单的一道,比较三个字符串字符就行,2个一样就改一次,都不一样就改两次,

代码:

#include<iostream>
using namespace std;
int n;
string s1,s2,s3;
int ans;
int main()
{
    cin>>n;
    cin>>s1>>s2>>s3;
    for(int i=0;i<n;i++)
    {
        if(s1[i]==s2[i] && s1[i]==s3[i]) continue;
        else if(s1[i]==s2[i] || s1[i]==s3[i] || s2[i]==s3[i]) ans++;
        else ans+=2;
    }
    cout<<ans<<endl;  
    return 0;
}

⭐️D.数豆豆

题目:

在这里插入图片描述

🌟题解:

考察一下思维吧,其实也很简单,就是每次拿大的数字,排下序就好了

代码:

#include <iostream>
#include <string>
#include<algorithm>
using namespace std;
int main()
{
    string s;
    cin>>s;
    sort(s.begin(),s.end());
    reverse(s.begin(),s.end());
    string s1,s2;
    for(int i=0;i<s.size();++i)
    {
        if(i%2==0)
            s1=s1+s[i];
        else
            s2=s2+s[i];
    }
    if(s1[0]=='0')    s1="0";
    if(s2[0]=='0')    s2="0";
    cout<<s1<<endl;
    cout<<s2<<endl;
    return 0;
}

⭐️E.Another string problem

题目:

在这里插入图片描述

🌟题解:

也是挺简单的,呆梨同学们都可以报名新生赛体验今年12月。就判断下是否两个字符串只有一个字符不一样就行,注意中间缺字符或者多字符也是可以的,那么就有三种情况,字符一样长,不一样长是删除还是增加(差距为1),还有差距大于1了因为只能改一次肯定不行。

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
    string s, t;
    cin >> s ; cin>>t;
    int n = s.size(), m = t.size();
    if (abs(n-m) > 1) cout << "NO" << endl;
    else if (n == m) {
        int cnt = 0;
        for (int i = 0; i < n; ++i)
            if (s[i] != t[i] && ++cnt > 1) {
                cout << "NO" << endl; return 0;
            }
        cout << "YES" << endl;
    } else { 
        int i, j,cnt=0;
        for (i = 0, j = 0; i < n && j < m; ++i, ++j) {
            if (s[i] != t[j]) {
                if (n > m) --j;
                else --i;
                if (++cnt > 1) {
                    cout << "NO" << endl; return 0;
                }
            }
        }
        if (i < n || j < m) ++cnt;
        cout << (cnt == 1 ? "YES" : "NO") << endl;
    }
    return 0;
}

⭐️F.迷失的Syuggie

题目:
在这里插入图片描述

🌟题解:

也是一道典型的bfs题

网格由字符的二维数组"f"表示,其中"#“表示障碍物,”."表示空白格子。算法从起始点(标记为’S’)开始,探索所有可能的路径,直到达到目标点(标记为’T’)或者在给定的步数限制"k"内探索完所有可能的路径。最短路径长度存储在变量"ans"中,每当找到一条更短的路径时,它就会被更新。最后,最短路径长度被打印出来。

代码:

#include <iostream>
#include <queue>
using namespace std;
const int N=1010;
typedef pair<int,int> PII;
struct point {
    int x,y,step;
};
queue<point> q;
char f[N][N];
int x[]={-1,0,1,0},y[]={0,1,0,-1};
int n,m,k;
int sx,sy,tx,ty;
int ans=1e6;
int bfs()
{
    q.push({sx,sy,0});
    f[sx][sy]='#';
    while(q.size())
    {
        auto t=q.front();
        q.pop();
        if(t.step<=k) 
        {
            ans=min(ans,abs(t.x-tx)+abs(t.y-ty));

        }
        for(int i=0;i<4;i++)
        {
            int a=t.x+x[i],b=t.y+y[i];
            if(a>=1&&a<=n&&b>=1&&b<=m&&f[a][b]!='#')
            {
                q.push({a,b,t.step+1});
                f[a][b]='#';
            }
        }
    
    }
    return ans;
}
int main()
{
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            char c;
            cin>>c;
            if(c=='T')
            {
                tx=i;
                ty=j;
            }
            else if(c=='S')
            {
                sx=i;
                sy=j;
            }
            f[i][j]=c;
        }
    cout<<bfs()<<endl;
    return 0;
}

⭐️G.寻找签到题之路

题目:

在这里插入图片描述

🌟题解:

一眼典型背包dp,直接写就好。。。。就是时间有限要得分最大,每个题目时间也知道。总时间就是背包,每个题目分数就是价值,时间就是重量。不过也有大佬别的做法

代码:

1.
#include<bits/stdc++.h>
using namespace std;
const int N = 10010;
int t[N],s[N];    
int f[N][N];  
int main() 
{
    int n, m;   
    cin >> n >> m;
    for(int i = 1; i <= n; i++) 
        cin >> s[i] >> t[i];
    for(int i = 1; i <= n; i++) 
        for(int j = 1; j <= m; j++)
        {
            if(j < t[i]) 
                f[i][j] = f[i - 1][j];
            else    
                f[i][j] = max(f[i - 1][j], f[i - 1][j - t[i]] + s[i]);
        }           
    cout << f[n][m] << endl;
    return 0;
}//正的
#include<iostream>
using namespace std;
const int N = 1000005;
int n,m;
int f[N];
int v,w;
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>w>>v;
        for(int j=m;j>=v;j--)
        {
            f[j]=max(f[j],f[j-v]+w);
        }
    }
    cout<<f[m]<<endl;
    return 0;
}//逆的
2.dfs来自dy
#include<bits/stdc++.h>
using namespace std;
int t, n;
int s[21], ti[21];
int maxn;
void dfs(int time, int score, int tit) {
    if (time <0)return;
    if (tit == n){
        maxn = max(maxn, score);
        return;}
    dfs(time,score,tit+1);
    dfs(time-ti[tit],score+s[tit],tit+1);
    return;
}
int main() {
    cin >> n >> t;
    for (int i = 0; i < n; i++) {
        cin >> s[i] >> ti[i];
    }
    dfs(t, 0, 0);
    cout << maxn;
}

⭐️H.子矩阵和

题目:

在这里插入图片描述

🌟题解:

就是典型的二维前缀和处理一下查询

代码:

#include<iostream>
using namespace std;
typedef long long ll;
const int N=10010;
ll a[N],b[N],c[N][N],s[N][N];
int main()
{
    ll n,m,q;
    cin>>n>>m;
    for(ll i=1;i<=n;i++)
        cin>>a[i];
    for(ll i=1;i<=m;i++)
        cin>>b[i];
    for(ll i=1;i<=n;i++)
        for(ll j=1;j<=m;j++)
            c[i][j]=a[i]*b[j];
    for(ll i=1;i<=n;i++)
        for(ll j=1;j<=m;j++)
             s[i][j] = s[i][j - 1] + s[i - 1][j] - s[i - 1][j - 1] + c[i][j];
    cin>>q;
    while(q--)
    {
        ll x1,y1,x2,y2;
        cin>>x1>>y1>>x2>>y2;
        cout<<s[x2][y2] - s[x1 - 1][y2] - s[x2][y1 - 1] + s[x1 - 1][y1 - 1]<<endl;
    }
    return 0;
}

⭐️I.最短区间

题目:
在这里插入图片描述

🌟题解:

双指针i,j指一指循环区间根据条件找到最小区间

代码:

1.
#include<iostream>
using namespace std;
const int N = 100005;
typedef long long ll;
ll n,x;
ll a[N];
ll mul=1,ma;
int ans=N;
int main()
{
    cin>>n>>x;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1,j=1;i<=n;i++)
    {
        while(mul<x && j<=n)
        {
            mul*=a[j];j++;
        }
        if(mul>=x) ans=min(ans,j-i);
        mul/=a[i];
    }
    if(ans>n) ans=-1;
    cout<<ans<<endl;
    return 0;
}
2.
#include <iostream>
using namespace std;
const int N = 1e5 + 5;
int a[N];
int main() {
    int n, x;
    cin >> n >> x;
    for (int i = 1; i <= n; ++i)
        cin >> a[i];
    int left = 1, right = 1, len = 0;
    long long prod = a[1];
    while (right <= n) {
        if (prod >= x) { 
            if (len == 0 || right - left + 1 < len) 
                len = right - left + 1;
            prod /= a[left]; 
            left++;
            if (left > right) { 
                right++;
                if (right <= n)
                    prod *= a[right];
            }
        } else {
            right++;
            if (right <= n)
                prod *= a[right];
        }
    }
    if (len == 0)
        cout << "-1" << endl;
    else
        cout << len << endl;
    return 0;
}

⭐️J.点球大战

题目:
在这里插入图片描述

🌟题解:

代码:


⭐️K.冠军预言

题目:
在这里插入图片描述

🌟题解:

代码:


⭐️L.an interesting problem

题目:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

🌟题解:

很复杂的一道题但是思维很简单,代码量很多

代码:


⭐️M.选数异或

题目:

在这里插入图片描述

🌟题解:

我们可以用一个桶来记录每个数出现的次数,然后从前往后遍历数列,对于每个数 x,我们可以计算出在它之前出现的比它大的数的个数,就是(i-1-cnt[x]),其中 i 是当前遍历到的位置,cnt[x] 是 x* 出现的次数。这个式子的意思是,在 x 之前,一共有 i−1 个数,其中有 cnt[x] 个数等于 x,所以比 x大的数的个数就是 i−1−cnt[x]。

最后的答案就是所有的逆序对个数之和。时间复杂度 O*(*n)。

代码:

#include<iostream>
using namespace std;
const int N = 1000010;
typedef long long ll;
ll n,cnt[N],x,ans;
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++) 
    {
        cin>>x;
        ans+=(i-1-cnt[x]);
        cnt[x]++;
    }
    cout<<ans<<endl;
    return 0;
}

A<B<CG<HD<E<I<M<F<JKL

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

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

相关文章

【软考】11.3 需求分析/获取/定义/验证/管理

《软件需求》 需求分类 需求获取 联合需求计划&#xff08;JRP&#xff09;&#xff1a;联合各个关键用户代表、系统分析师、开发团队代表一起讨论需求 需求分析 结构化的需求分析 自顶向下&#xff0c;逐步分解&#xff0c;面向数据 功能模型&#xff08;数据流图&#xff0…

跟随光标圆形文本旋转

今天给大家带来的是光标变成圆形字符串环绕 不多说先上效果图 原理呢,也很简单 就是先把文本 <h2>大威天龙 - 世尊地藏 - 般若诸佛 - 般若巴嘛哄 -</h2>然后使用js将文本处理成每个字符一个span,并且让他们旋转 let text document.querySelector(h2)text.innerH…

详解FAT32文件系统的簇

FAT32文件系统中&#xff0c;簇&#xff08;Cluster&#xff09;是文件分配的基本单位。它是一组连续的扇区&#xff08;通常是硬盘扇区&#xff09;的集合&#xff0c;用于存储文件的数据。以下是关于FAT32簇的一些详细介绍&#xff1a; 簇的大小&#xff1a;簇的大小是FAT32文…

Node学习笔记之path模块

path 模块提供了 操作路径 的功能&#xff0c;我们将介绍如下几个较为常用的几个 API&#xff1a; API 说明 path.resolve 拼接规范的绝对路径常用 path.sep 获取操作系统的路径分隔符 path.parse 解析路径并返回对象 path.basename 获取路径的基础名称 path.dirname…

实际项目中最常用的设计模式

在软件开发领域,设计模式是一种经过验证的通用解决方案,用于解决各种常见问题。它们有助于提高代码的可维护性、可扩展性和可重用性。虽然有许多不同的设计模式,但以下是实际项目中最常用的一些: 1. 单例模式 (Singleton Pattern) 单例模式确保一个类只有一个实例,并提供…

计算机组成原理第三章 11 存储器的层次结构 存储器的分类 存储器的性能指标

文章目录 存储器的层次结构存储器的分类(存储介质分类)存取方式分类读写方式分类(是否可读可写)断电后信息是否丢失信息是否被破坏 存储器的性能指标 存储器的层次结构 其中CPU可以直接和cache和主存进行交互。辅存内的数据需要调到主存内才能被CPU访问&#xff0c;这很好理解&…

【C语言】指针进阶【下】

&#x1f388;个人主页&#xff1a;.满船清梦压星河_-CSDN博客 &#x1f302;c/c领域新星创作者 &#x1f389;欢迎&#x1f44d;点赞✍评论❤️收藏 &#x1f61b;&#x1f61b;&#x1f61b;希望我的文章能对你有所帮助&#xff0c;有不足的地方还请各位看官多多指教&#xf…

修改ConsoleApplication17_2项目实现oss上线

首先创建号oss&#xff0c;上传文件&#xff0c;复制临时链接 木马内写 可以看到能成功上线但是有个问题就是占用cpu大小为9%左右&#xff0c;这里我用的是腾讯云oss实现的&#xff0c;用阿里云oss实现也是9%左右 我再次进行url的aes加密 还是百分之9左右&#xff0c; 这里…

利用ChatGPT进行数据分析并生成数据分析报告

目录 1 1 请罗列出中国所有的省份 按省份人口数量排序&#xff0c;给出序号&#xff0c;并整理成表格&#xff0c;人口最多的排在最前面&#xff1b; 在原有的数据源上&#xff0c;添加一些新的分类&#xff0c;并将分类结果进行反馈。 在表格中添加以下类别&#xff1a;男女…

网络协议--ICMP:Internet控制报文协议

6.1 引言 ICMP经常被认为是IP层的一个组成部分。它传递差错报文以及其他需要注意的信息。ICMP报文通常被IP层或更高层协议&#xff08;TCP或UDP&#xff09;使用。一些ICMP报文把差错报文返回给用户进程。 ICMP报文是在IP数据报内部被传输的&#xff0c;如图6-1所示。 ICMP…

新兴网络安全威胁:数字防御新格局

根据Check Point Research (CPR)的数据&#xff0c;今年上半年犯罪活动大幅增加&#xff0c;第二季度全球每周网络攻击激增 8%&#xff0c;这创下了两年来的最高成交量。 勒索软件和黑客行为等传统威胁已经演变&#xff0c;犯罪团伙不断调整其方法和工具来渗透和影响世界各地的…

BFS专题9 中国象棋-马-有障碍

题目&#xff1a; 思路&#xff1a; 由题意&#xff0c;这也是 BFS 即可&#xff0c;这里注意的是&#xff0c;我们要存储好哪些坐标有障碍&#xff0c;在搜索各个方向的时候&#xff0c;判断搜索的对应方向是否有障碍&#xff0c;即 !r[tem.x dx[i] / 2][tem.y dy[i] / 2]…

Hadoop3教程(三十三):(生产调优篇)慢磁盘监控与小文件归档

文章目录 &#xff08;161&#xff09;慢磁盘监控&#xff08;162&#xff09;小文件归档小文件过多的问题如何对小文件进行归档 参考文献 &#xff08;161&#xff09;慢磁盘监控 慢磁盘&#xff0c;是指写入数据时特别慢的一类磁盘。这种磁盘并不少见&#xff0c;当机器运行…

HTML选项框的设计以及根据不同选项的值对应不同的事件

文章目录 HTML选项框的设计JS根据不同的选项框对应出不同的事件 HTML选项框的设计 在前端页面的设计中&#xff0c;多选框的设计用select标签完成实现 全部选项都显示的选项框 <form><select multiple"multiple"><option></option><opti…

google登录k8s dashboard ui显示“您的连接不是私密连接”问题解决梳理

1.问题描述 OS Version:CentOS Linux release 7.9.2009 (Core) K8S Version:Kubernetes v1.20.4 k8s dashboard ui安装完毕后&#xff0c;通过google浏览器登录返现https网页&#xff0c;发现非官方的https网页无法打开 网址&#xff1a;https://192.168.10.236:31001 2.原…

[java进阶]——异常详解,try catch捕获异常,抛出异常

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 一、异常的体系结构 二、处理异常的本质 三、异常处理的三种方式 3.1虚拟机jvm处理(默认) 3.2 try catch捕获异常 3.3抛出异常 3.4finally关键字 四、自定义异常 五、总结 一、异常的体系结构 分析&#…

pensieve运行的经验

1运行run_videopy时出现如下问题&#xff1a; cmd: Union[List[str], str], ^ SyntaxError: invalid syntax原因是EasyProcess版本与python版本不对应&#xff0c;解决办法可见之前这篇博客&#xff1a;SyntaxError: invalid syntax。 2解决完上述问题后&#xff0c;输…

NSSCTF第8页(1)

[HGAME 2023 week1]Classic Childhood Game js代码审计&#xff0c;找关键语句&#xff0c;发现event.js里边东西是最多的 找到了通关语句 他下边应该是就关键代码了&#xff0c;有一串16进制代码 解出来是base64&#xff0c;接着解 两次base64 解码&#xff0c;就得到了flag…

Vector3(即是位置,也是方向)

在三维世界中&#xff0c;最重要的就是确定物体在三维世界中 的位置、大小和缩放等信息。在Unity中&#xff0c;Vector3结构体就是用来表示这些信息的&#xff0c;此外也用Vector2来表示二维世界中的信息。 Vector3结构体由x、y、z这3个数值组成&#xff0c;表示了一个向量&am…

Nautilus Chain 与 Coin98 生态达成合作,加速 Zebec 生态亚洲战略进

目前&#xff0c;行业内首个模块化 Layer3 架构公链 Nautilus Chain 已经上线主网&#xff0c;揭示了模块化区块链领域迎来了全新的进程。在主网上线后&#xff0c;Nautilus Chain 将扮演 Zebec 生态中最重要的底层设施角色&#xff0c;并将为 Zebec APP 以及 Zebec Payroll 规…