每日刷题——相遇、宝石(模拟+数学)、相助(模拟+数组)、相依(dp的优化)

简介: 每日刷题——相遇、宝石(模拟+数学)、相助(模拟+数组)、相依(dp的优化)

相遇

原题链接登录—专业IT笔试面试备考平台_牛客网

题目描述

运行代码

#include<iostream>
using namespace std;
int main(){
int a,b;
cin>>a>>b;
if(a==b)
{ 
    cout<<"p";
} 
else if(a - b == 1 || (a == 1 && b == 3))
    {
        cout << "b";
    }
else 
{
    cout<<"a";
}
    return 0;    
}
 

代码思路

分析输赢情况,总结输出结果即可

宝石(模拟+数学)

原题链接登录—专业IT笔试面试备考平台_牛客网

题目描述

运行代码

#include<iostream>
#include<string.h>
using namespace std;
int main(){
int a,b,c;
cin>>a>>b;
if(b<=2*a)
{
c=5*b+a;
}
else 
{
    c=11*a;
} 
    cout<<c<<endl;
    return 0;
}

代码思路

数学情况总结,观察路段最短路线

相助(模拟+数组)

原题链接登录—专业IT笔试面试备考平台_牛客网

题目描述

运行代码

#include<iostream>
using namespace std;
const int N = 5e5+10;
int a[N];
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    if(n==1){
        cout<<"-1"<<endl;
        return 0;
    }
    if(a[1]==a[n])
    {
        cout<<1<<endl;
        return 0;
    }
    for(int i=2;i<n-1;i++){
        if(a[1]==a[i]&&a[i+1]==a[n])
        {
            cout<<"2"<<endl;
            return 0;
        }
    }
    cout<<-1;
    return 0;
}

代码思路

对给定的数据进行遍历查找,尝试找到两个相邻的相同元素,然后删除这两个元素。代码首先检查首尾两个元素是否相等,若相等则输出2即可;接着从第二个元素开始遍历,寻找与首尾相同的元素,若找到则输出2;如果没有找到任何符合条件的组合,则输出-1。

相依(dp的优化)

原题链接:登录—专业IT笔试面试备考平台_牛客网

题目描述

运行代码

#include <iostream>
#include<vector>
using namespace std;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr); 
  int t = 1;
  while (t--) {
    int n;
  cin >> n;
  vector<int> a(n + 1);
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
  }
  vector<int> dp(n + 1, -1);
  vector<int> st(n + 1, -1);  
  dp[0] = 0;
  st[a[1]] = 1;
  for (int i = 2; i <= n; i++) {
    int x = st[a[i]];
    if (x != -1 && dp[x - 1] != -1) {
      dp[i] = dp[x - 1] + 1;      
      if (dp[i - 1] != -1 && dp[i - 1] < dp[x - 1]) {
        st[a[i]] = i;
      }
    } else {
      st[a[i]] = i;
    }
  } 
  cout << dp[n] << "\n";
  } 
  return 0;
}

代码思路

通过动态规划来求解最小的操作次数。首先,代码定义了一个名为dp的向量,用来存储每个位置上的最小操作次数。同时,还有一个名为st的向量,用来记录每个元素最近被删除的位置。st向量的值为-1表示该元素尚未被删除。

接下来,代码从第二个元素开始遍历整个数组。在遍历过程中,代码会比较当前位置的元素与之前元素的值,如果相等,说明可以通过删除一段区间内的元素来使数组变为空。此时,代码会更新dp向量,并将当前元素的索引存入st向量中。

需要注意的是,在遍历过程中,代码还会检查当前元素的前一个元素是否比当前元素的最小操作次数少。如果是的话,代码会更新st向量,以便反映新的最小操作次数。

最后,代码输出dp[n],即数组变为零的最小操作次数。如果无法使数组变为零,dp[n]的值将会是-1。

目录
相关文章
|
8月前
|
人工智能 自然语言处理 监控
LongPort MCP:证券业首个券商MCP,AI赋能智能投资新时代,散户也能玩转机构级交易
LongPort MCP是长桥集团推出的证券行业首个券商模型上下文协议,通过标准化接口实现AI与金融服务的无缝对接,支持自然语言交互的智能投资服务。
1136 8
LongPort MCP:证券业首个券商MCP,AI赋能智能投资新时代,散户也能玩转机构级交易
|
缓存 监控 网络协议
9条实用的思科Catalyst系列交换机巡检命令!
9条实用的思科Catalyst系列交换机巡检命令!
378 1
|
SQL JSON 分布式计算
DataWorks操作报错合集之如何解决在创建Hologres开发节点时报错
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
数据安全/隐私保护
(只需五步)注册谷歌账号详细步骤,解决“此电话号码无法验证”问题
注册google一直不方便,因为如果直接去google官网注册,那么它大概率会显示“此电话号码无法用于进行验证”接下来,按着教程来一步步做,就可以实现跳过此限制,成功用手机号注册google了。很简单的。
21727 1
|
存储 安全 网络安全
网络防御的三重奏:漏洞管理、加密技术与安全意识提升
【5月更文挑战第29天】随着数字化时代的到来,网络安全和信息安全成为维护社会稳定和个人隐私的重要防线。本文将深入探讨网络安全中的漏洞管理、加密技术以及提升个人和企业的安全意识这三个关键领域。通过对现有安全威胁的分析,我们将提供一系列针对性的策略来强化网络防御体系,确保信息在传输和存储过程中的安全性,同时提高整体社会对网络安全重要性的认知。
|
XML JSON 前端开发
AJAX 中创建 XMLHttpRequest 对象的方法和常用属性、方法
AJAX 中创建 XMLHttpRequest 对象的方法和常用属性、方法
193 0
|
JSON 架构师 Java
SpringBoot从小白到精通(三)系统配置及自定义配置
前面介绍了Spring的@Controller和@RestController控制器, 他们是如何响应客户端请求,如何返回json数据。 今天来说一说SpringBoot的application.properities的相关配置属性和如何自定义配置文件。
SpringBoot从小白到精通(三)系统配置及自定义配置
|
存储 算法 程序员
数据结构与算法(二) 概述
数据结构与算法(二) 概述
140 0
|
测试技术 Python
Python分享-email.message如何构建你的邮件消息
Python分享-email.message如何构建你的邮件消息
281 0
Java并发之AbstractQueuedSynchronizer(AQS)详解
Java并发之AbstractQueuedSynchronizer(AQS)详解
Java并发之AbstractQueuedSynchronizer(AQS)详解