第五届太原理工大学新生赛(决赛)题解

news2024/10/7 10:16:48

题解)

  • <font color=red>第五届太原理工大学新生赛(决赛)
    • :star:A.810975
      • :star2:<font color=green>题意
      • :cherries:<font color=red>解决思路
      • :pear:代码
    • :star:<font color=pink>B.hammer玩游戏
      • :star2:<font color=green>题意
      • :cherries:<font color=red>解决思路
      • :pear:代码
    • :star:<font color=blue>C.Gold Rong 的数组
      • :star2:<font color=green>题意
      • :cherries:<font color=red>解决思路
      • :pear:代码
    • :star:<font color=Plum>D.勇敢鼠鼠
      • :star2:<font color=grey>题意
      • :cherries:<font color=navy>解决思路
      • :monkey:代码
    • :star:<font color=red>E.syuggie的彩票
      • :star2:<font color=hotpink>题意
      • :cherries:<font color=lowgreen>解决思路
      • :pear:<font color=purple>代码
    • :star:<font color=red>F.A hard problem
    • :star:<font color=sliver>G.An easy string problem
      • :star2:<font color=green>题意
      • :cherries:<font color=red>解决思路
      • :pear:代码
    • :star:<font color=green>H.An easy game
      • :star2:<font color=green>题意
      • :cherries:<font color=red>解决思路
      • :pear:代码
    • :star:<font color=MediumPurple>I.饿饿饭饭是何意味
      • :star2:<font color=green>题意
      • :cherries:<font color=red>解决思路
      • :pear:代码
    • :star:<font color=Plum>J.TYUT链
    • :star:<font color=Plum>K.抢车位
      • 🌟题意
      • 🍒解决思路
      • 🍐代码
    • :star:<font color=Plum>L.Syuggie的减肥计划
      • 🌟题意
      • 🍒解决思路
      • 🍐代码
    • :star:<font color=Plum>M.公平分配
    • :star:<font color=Plum>N.A+B problem
      • :star2:<font color=green>题意
      • :cherries:<font color=red>解决思路
      • :pear:代码

第五届太原理工大学新生赛(决赛)


⭐️A.810975

在这里插入图片描述

🌟题意

就是说n个对战夜吹说他赢了几把,连胜了几把看有没有可能,有就输出yes+方案,没有就输出no

🍒解决思路

分类讨论,想什么时候就是在吹。(题目保证n>=m>=k)

  1. 当k=0,一局连胜都没有,那么肯定m是0才是对的(一局都没赢,输出n个0),否则就是在吹。
  2. 当k>0:
    (1) 特判:m==k的时候(即是赢的局数和连胜的局数一样多,此时必定有解,输出m个1后输出n-m个0;
    (2)m>k的时候:如果n=m=k那么就输出n个1,否则就输出no,因为总共就n局都赢了肯定k也等于n;
    n!=m的时候我们可以这样想,两个0可以包住k个1让他与连胜k场分开,那么我们就可以采用先输出k个1,然后输出一个0在输出k个1,所以只要判断有几局没有赢就有几个0,然后判断k倍0的个数是否大于等于1的个数,这样是可以的,否则就不行。
    3.输出要注意0如果多了就后面补上就行。
    在这里插入图片描述

🍐代码

#include<iostream>
using namespace std;
int main()
{
    int n, m, k; cin >> n >> m >> k;
    if (k == 0)
    {
        if (m == 0) {
            cout << "YES\n";
            for (int i = 0; i < n; i++)cout << 0;
        }
        else cout << "NO\n";
    }
    else
    {
        if (m == k) {
            cout << "YES\n";
            for (int i = 0; i < n; i++)
            {
                if (i < m)cout << 1; else cout << 0;
            }
        }
        else
        {
            if (n == m)
            {
                if (k != m)cout << "NO\n";
                else
                {
                    for (int i = 0; i < n; i++)cout << 1;
                }
            }
            else
            {
                int a = n - m, b = m - k;
                int c = a;int e=k;
                if (c * k >= b)
                {
                    cout << "YES\n";
                    while (k--)cout << 1;
                    while (b>0)
                    {
                        int d = e;
                        cout << 0; a--;
                        while (d--&&b>0) { cout << 1; b--; }
                    }
                    while (a--)cout << 0;
                }
                else cout << "NO\n";
            }
        }
    }
}

⭐️B.hammer玩游戏

在这里插入图片描述

🌟题意

其中 A 代表进攻, B 代表防御,C 代表蓄力。
如果 Hammer 可以击杀电脑,则输出一个整数,表示 Hammer 能得到的最高得分。
否则结局一定是平局,(不然 Hammer 的透视挂岂不是白买了!)输出 draw

🍒解决思路

1.当机器人进攻时我们只能防御;
2.当机器人防御时我们可以蓄力得到高分
3.当机器人蓄力时我们可以蓄力,也可以进攻如果有能量。为了得到最高分,我们就必须在最后机器人蓄力的时候击杀它,否则杀不掉。
综上我们要记遍历录下C最后的位置同时统计C的数量,然后遍历到C最后的位置统计B的数目,如果能量为0,那么杀不掉。
同时特判如果没有C也是杀不掉。

🍐代码

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
 int n;
    cin>>n;
    string a;
    cin>>a;
    int cnt=0;
    int ans=-1;
    int jj=0;
    for(int i=0;i<n;i++){if(a[i]=='C'){ans=i;cnt++;}}
    for(int i=0;i<ans;i++){if(a[i]=='B')jj++;}
    if(cnt+jj-1<=0||ans==-1)cout<<"draw";
       else cout<<cnt+jj-2;
}

⭐️C.Gold Rong 的数组

在这里插入图片描述

🌟题意

对一个长度为n的初始元素为0的数组进行修改,每次选择一个位置x,一个正整数y,将数组每个数加上max(y-abs(x-i),0),经过q此修改后数组是什么

🍒解决思路

在这里插入图片描述

通过观察我们可以发现,有些位置不会受到影响还是原来的值0,通过计算我们可以得到对于一次操作,

  • 最左端影响到L=max(x-y,1)
  • 最右端影响到R=min(x+y,n)
    最大长度为2y,然后进行修改即可

🍐代码

#include <iostream>
using namespace std;
const int N = 1e5+10;
int a[N];
int main()
{
    int n,q;
    cin>>n>>q;
    while(q--){
        int x,y;
        cin>>x>>y;
        int l = max(x-y,1);
        int r = min(x+y,n);
        for(int i = l;i<=r;i++)
        {
            a[i] +=max(y-abs(x-i),0);
        }
    }
    for(int i = 1;i<=n;i++)
        cout<<a[i]<<" ";
    return 0;
}

⭐️D.勇敢鼠鼠

在这里插入图片描述

🌟题意

n个数中选择n-1个数进行|运算然后又n种选择,输出n个方案的最大值,注意数据范围

🍒解决思路

构造前缀或,后缀或,算出n种答案,选最大值

🐒代码

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <map>
#include <cmath>
#include <string>
using namespace std;
long long  a[210000],b[210000],c[210000];
int main()
{   
    int n;
    cin>>n;
    for(int i=1;i<=n;i++) {
        cin>>a[i];
        b[i]=a[i];
        c[i]=a[i];
    }
    for(int i=2;i<=n;i++)
    {
        b[i]=b[i]|b[i-1];
    }
    for(int i=n-1;i>=2;i--){
        c[i]=c[i]|c[i+1];
    }
    long long ans=0;
    for(int i=2;i<n;i++){
        ans=max(ans,b[i-1]|c[i+1]);
    }
    ans=max(ans,c[2]);
    ans=max(ans,b[n-1]);
    cout<<ans;
    return 0;
}

⭐️E.syuggie的彩票

在这里插入图片描述

🌟题意

给定一个彩票刮开了一部分,只有仅有k个1连在一起才算中奖,输出可能个数,没有则输出delicious

🍒解决思路

创建滑动窗口统计k区间内是否都是1,外面是否都是0,计数即可。

🍐代码

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define endl "\n"
#define ll long long
#define ull unsigned ll
#define pb push_back
#define all(v) v.begin(),v.end()
#define PII pair<int,int>
#define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define rep(i,a,b) for(int i=(int)a,i##i=(int)b;i<=i##i;i++)
#define per(i,a,b) for(int i=(int)a,i##i=(int)b;i>=i##i;i--)
const int N=1e5+5;
int c0[N],c1[N];
void solve(){
	int n,k; cin>>n>>k;
	string s; cin>>s; s=" "+s; 
	rep(i,1,n){
		c0[i]=c0[i-1]+(s[i]=='0');
		c1[i]=c1[i-1]+(s[i]=='1');
	}
	int ans=0;
	rep(i,k,n){
		if(c0[i]-c0[i-k]==0&&!c1[i-k]&&!(c1[n]-c1[i])) ans++;
	}
	if(ans) cout<<ans<<endl;
	else cout<<"delicious"<<endl;
}
int main(){
	IOS; 
	int T=1; 
	while(T--) solve();
}

⭐️F.A hard problem


⭐️G.An easy string problem

在这里插入图片描述

🌟题意

给一个字符串修改一个字符成为字典序最小的回文串

🍒解决思路

因为题目给了只需修改一个字符,则证明只有一个字符不同当字符串长度为偶数时,找到不同的位置看那个字典序小就换成那个。奇数时把中间位置字符换掉,如果为a则换成b否则都换成a。

🍐代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;cin>>n;
    string a;cin>>a;
    vector<int>b(n);
    char c,d;
    int j=0;
    int cnt=0,ans;
    for(int i=0;i<n/2;i++)
    {
        if(a[i]!=a[n-1-i]){
            c=a[i],d=a[n-1-i];
            cnt=i,ans=n-1-i;
            j++;
        }
    }
    if(j>0){
    if(c>d){
    for(int i=0;i<n;i++)
    {
        if(i==cnt)cout<<d;
        else cout<<a[i];
    }}
    else
    {
        for(int i=0;i<n;i++)
        {
            if(i==ans)cout<<c;
            else cout<<a[i];
        }
    }}
    else{
        for(int i=0;i<n;i++)
        {if(i==n/2&&a[i]!='a')cout<<'a';
         else
         if(i==n/2&&a[i]=='a')cout<<'b';
         else cout<<a[i];
    }
    }}

⭐️H.An easy game

在这里插入图片描述

🌟题意

n个数字轮流选择一个数字和它的因子,谁不能拿了就赢了。

🍒解决思路

,可以暴力搜索+特判。
但可以发现只有1时bob赢

🍐代码

#include<iostream>
using namespace std;
int main()
{
    int n;cin>>n;
    if(n>=2)cout<<"Alice";
    else cout<<"Bob";
}

⭐️I.饿饿饭饭是何意味

在这里插入图片描述

🌟题意

如果字符串有eat就输出eeffQAQ否则输出What does it mean?

🍒解决思路

find 找一下位置,或者strstr

🍐代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string a;
    cin>>a;
    if(a.find("eat")<=1000)cout<<"eeffQAQ";
    else cout<<"What does it mean?";
}

⭐️J.TYUT链


⭐️K.抢车位

在这里插入图片描述

🌟题意

有n个停车位,由于车主们害怕刮蹭,所以每次停车都停在离别的车最远的地方,特别的第一辆车停在最左边。问可以停多少车

🍒解决思路

这个问题和广大男同胞上厕所有着大同小异的关系。
是一个坑位利用率的问题。怎么解决呢?
我们不难发现n=1时可以停1个即f(1)=1,f(2)=1,f(3)=2,f(4)=2;
打表可以发现规律a[i]=a[i/2]+a[i/2+1]-1;
a[i]=a[(i+1)/2]*2-1;
同时我们也可以想到当n大于2时每停一辆车都必须在两辆车之间停,所以就看看两辆车之间的距离能放多少车。

🍐代码

#include<bits/stdc++.h>
using namespace std;
int a[1000001];
int main()
{
    int n;
    cin>>n;
    a[1]=1;a[2]=1;a[3]=2;a[4]=2;
    if(n>4)
    {
        for(int i=5;i<=(n/2+1);i++)
        {
            if(i%2==0) a[i]=a[i/2]+a[i/2+1]-1;
            else a[i]=a[(i+1)/2]*2-1;
        }
        if(n%2==0) a[n]=a[n/2]+a[n/2+1]-1;
        else a[n]=a[(n+1)/2]*2-1;
    }
    cout<<a[n]<<endl;
}

⭐️L.Syuggie的减肥计划

在这里插入图片描述

🌟题意

每24小时必须吃一顿,给出一日三餐热量使得结束时热量最小

🍒解决思路

可以动态规划,从第一天吃早午晚饭记录下每次选择的方案到最后比最小。
同时也可以进行贪心先选择第一天最小的,然后选择这一天后三顿最小的,继续选择,可以用queue实现。

🍐代码

#include<bits/stdc++.h>
using namespace std;
int d[100005][3];
int main()
{
	int n,i,j;
	cin>>n;
	for(i=1;i<=n;i++)
	cin>>d[i][0]>>d[i][1]>>d[i][2];
	for(i=n-1;i>=1;i--)
	{
	    d[i][2]+=min(d[i+1][0],min(d[i+1][1],d[i+1][2]));
		d[i][1]+=min(d[i+1][1],min(d[i][2],d[i+1][0]));
		d[i][0]+=min(d[i+1][0],min(d[i][1],d[i][2]));
	}
	cout<<min(d[1][0],min(d[1][1],d[1][2]));
	return 0;
}

⭐️M.公平分配


⭐️N.A+B problem

在这里插入图片描述

🌟题意

给两个数字竖式向左对齐相加

🍒解决思路

少的位数补0相加即可

🍐代码

#include<iostream>
using namespace std;
#define int long long
int shu(int n)
{
    int cnt=0;
    while(n)
    {
        cnt++;
        n/=10;
    }
    return cnt;
}
int ss(int u)
{
    int sum=1;
    while(u--)sum*=10;
    return sum;
}
signed main()
{
    int a,b;
    cin>>a>>b;
    int c=shu(a);
    int d=shu(b);
    if(c>d){b=b*ss(c-d);cout<<a+b;}
    if(c==d)cout<<a+b;
    if(c<d){a=a*ss(d-c);cout<<a+b;}
}

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

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

相关文章

STM32--综述

文章目录 前言STM32简介STM32F103C8T6系统结构Keil软件安装注意事项新建工程操作流程 前言 本专栏将学习B站江协科技的STM32入门教程&#xff0c;通过自身理解和对老师的总结所写的博客专栏。 STM32简介 STM32是意法半导体&#xff08;STMicroelectronics&#xff09;公司推…

5.3.10.静态映射表建立过程分析

5.3.10.静态映射表建立过程分析 5.3.10.1、建立映射表的三个关键部分 (1)映射表具体物理地址和虚拟地址的值相关的宏定义 https://blog.csdn.net/liangzuzong/article/details/131994560 (2)映射表建立函数&#xff08;宏定义&#xff09;。该函数负责由(1)中的映射表来建立li…

以太网TCP协议(十二)

目录 一、概述 二、功能 2.1 连接管理 2.2 响应与序列号 2.3 超时重发 2.4 传输单位&#xff1a;段 2.5 窗口控制 2.6 流控制 2.7 拥塞控制 2.8 效率提高 三、报文格式 一、概述 TCP作为一种面向有连接的协议&#xff0c;只有在确认通信对端存在时才会发送数据&…

SD-MTSP:蜘蛛蜂优化算法SWO求解单仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)

一、蜘蛛蜂优化算法SWO 蜘蛛蜂优化算法&#xff08;Spider wasp optimizer&#xff0c;SWO&#xff09;由Mohamed Abdel-Basset等人于2023年提出&#xff0c;该算法模型雌性蜘蛛蜂的狩猎、筑巢和交配行为&#xff0c;具有搜索速度快&#xff0c;求解精度高的优势。蜘蛛蜂优化算…

Hugging Face 的文本生成和大语言模型的开源生态

[更新于 2023 年 7 月 23 日: 添加 Llama 2。] 文本生成和对话技术已经出现多年了。早期的挑战在于通过设置参数和分辨偏差&#xff0c;同时控制好文本忠实性和多样性。更忠实的输出一般更缺少创造性&#xff0c;并且和原始训练数据更加接近&#xff0c;也更不像人话。最近的研…

论文研读-SIMD系列-基于分区的SIMD处理及在列存数据库系统中的应用

基于分区的SIMD处理及在列存数据库系统中的应用 单指令多数据&#xff08;SIMD&#xff09;范式称为列存数据库系统中优化查询处理的核心原则。到目前为止&#xff0c;只有LOAD/STORE指令被认为足够高效&#xff0c;可以实现预期的加速&#xff0c;并且认为需要尽可能避免GATHE…

Sentieon | 每周文献-Benchmark and Method Study(基准与方法研究)-第八期

基准与方法研究系列文章-1 标题&#xff08;英文&#xff09;&#xff1a; Standardized Comparison of Different DNA Sequencing Platforms 标题&#xff08;中文&#xff09;&#xff1a; 不同 DNA 测序平台的标准化比较 发表期刊&#xff1a; Clinical Chemistry 作者单…

leetCode刷题记录1

文章目录 hot100题200. 岛屿数量206. 反转链表207. 课程表208. 实现 Trie (前缀树)★ Student[] strArr new Student[26];//真的只是创建了引用数组 只是new了数组存放引用的内存 并没有真的new对象内存 215. 数组中的第K个最大元素221. 最大正方形226. 翻转二叉树234. 回文链表…

Java定时算法实现与应用(最小堆、时间轮)

文章目录 一、定时算法 概述二、最小堆算法1、概述2、Java实现最小堆算法&#xff08;1&#xff09;Timer使用&#xff08;2&#xff09;源码分析 3、应用 三、 时间轮算法1、概述2、Java实现时间轮算法 一、定时算法 概述 系统或者项目中难免会遇到各种需要自动去执行的任务&…

免费小程序商城搭建之b2b2c o2o 多商家入驻商城 直播带货商城 电子商务b2b2c o2o 多商家入驻商城 直播带货商城 电子商务 bbc

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端…

视频音频怎么提取成MP3?教你几种简单提取方法

提取视频音频并将其转换为MP3格式有很多好处。首先&#xff0c;MP3格式是一种广泛支持的音频格式&#xff0c;可以在几乎所有设备上播放&#xff0c;包括计算机、手机和音乐播放器。这意味着您可以在任何设备上随时随地享受音频内容&#xff0c;而不必担心格式兼容性问题。那么…

Win11中使用pip或者Cython报错 —— error: Microsoft Visual C++ 14.0 is required.

第一步&#xff1a;下载Visual Studio 2019 下载地址&#xff1a; https://learn.microsoft.com/zh-cn/visualstudio/releases/2019/release-notes 第二步&#xff1a;安装组件 选择单个组件&#xff0c;勾选以下两个组件 其他错误&#xff1a; 无法打开文件“python37.li…

触控触感方案原厂18按键触摸芯片电路图

VK3618I具有18个触摸按键&#xff0c;可用来检测外部触摸按键上人手的触摸动作。该芯片具有较 高的集成度&#xff0c;仅需极少的外部组件便可实现触摸按键的检测。 提供了2组I2C输出功能&#xff0c;1个INT中断输出脚&#xff0c;2组I2C脚和INT可并联&#xff0c;每组单键输出…

【腾讯云 Cloud Studio 实战训练营】快速构建React完成点餐H5页面

一&#xff0c;前言 1.1 相关链接 官网地址&#xff1a;Cloud Studio 官方文档地址&#xff1a;Cloud Studio&#xff08;云端 IDE&#xff09;简介 | Cloud Studio 1.2 Cloud Studio&#xff08;云端 IDE&#xff09;简介 Cloud Studio 是基于浏览器的集成式开发环境&#…

山景DSP芯片可烧录AP8224C2音频处理器方案

AP8224C2高性能32位音频应用处理器AP82系列音频处理器是面向音频应用领域设计的新一代SoC平台产品&#xff0c;适用于传统音响系统、新兴的蓝牙或Wifi 无线音频产品、Sound Bar 和调音台等市场。该处理器在总体架构和系统组成上&#xff0c;充分考虑了音频领域的特点&#xff0…

一个月学通Python(三十四):使用Selenium模拟人工操作及获取网页内容

专栏介绍 结合自身经验和内部资料总结的Python教程&#xff0c;每天3-5章&#xff0c;最短1个月就能全方位的完成Python的学习并进行实战开发&#xff0c;学完了定能成为大佬&#xff01;加油吧&#xff01;卷起来&#xff01; 全部文章请访问专栏&#xff1a;《Python全栈教…

【cs61b】学习笔记day2

历史文章目录 【cs61b】学习笔记day1 文章目录 历史文章目录List两个小问题bits声明一个变量引用类型方框和指针表示法数组的实例化链表 SLList List 两个小问题 思考下面两个代码分别输出什么 Walrus a new Walrus(1000, 8.3); Walrus b; b a; b.weight 5; System.out.…

并发编程面试题1

并发编程面试题1 一、原子性高频问题&#xff1a; 1.1 Java中如何实现线程安全? 多线程操作共享数据出现的问题。 锁&#xff1a; 悲观锁&#xff1a;synchronized&#xff0c;lock乐观锁&#xff1a;CAS 可以根据业务情况&#xff0c;选择ThreadLocal&#xff0c;让每个…

2023最新版Anaconda下载安装教程(非常详细)从零基础入门到精通,看完这一篇就够了

1. 前言 小编的电脑是win10系统的&#xff0c;这里以win10系统安装Anaconda为例&#xff0c;其他的系统安装过程类似&#xff0c;可以照猫画虎&#xff0c;下面请看具体的安装过程。 2. 下载软件 1、首先去官网上进行下载软件&#xff0c;下载地址&#xff1a; https://docs…

php获取随机订单号(封装函数)

作为一个开发人员&#xff0c;生成订单时常常需要获取一段随机码来表示订单号&#xff0c;并且订单号一般包含的特定的时间日期等信息&#xff0c;临时现写一个比较浪费时间&#xff0c;这里有一个封装好的生成随机订单号的函数&#xff0c;需要时直接调用即可。 代码如下&…