【Python刷题】Atcoder Beginner Contest 371

news2024/9/28 1:18:33

目录

  • A - Jiro
    • 题目描述
    • 算法思路
    • 代码实现
  • B - Taro
    • 题目描述
    • 算法思路
    • 代码实现
  • D - 1D Country
    • 题目描述
    • 算法思路
    • 代码实现
  • E - I Hate Sigma Problem
    • 题目描述
    • 算法思路
    • 代码实现

A - Jiro

在这里插入图片描述

题目描述

有三个人,知道他们之中每两个人的年龄关系,输出年龄第二大的那个人是谁

算法思路

直接把所有情况列举即可

代码实现

s=list(input().split())
a=0
b=0
c=0
if s[0]=='<':
    if s[1]=='<' and s[2]=='<':
        print('B')
    elif s[1]=='<' and s[2]=='>':
        print('C')
    elif s[1]=='>':
        print('A')
elif s[0]=='>':
    if s[1]=='>' and s[2]=='>':
        print('B')
    elif s[1]=='>' and s[2]=='<':
        print('C')
    elif s[1]=='<':
        print('A')

B - Taro

在这里插入图片描述

题目描述

输入多组数据,每一组数据第一个值表示来自的家庭,第二个值表示出生孩子的性别,输入的数据已经按照出生时间来排序,对于每个家庭第一个出生的男孩输出Yes,其余输出No。

算法思路

用一个数组data来记录下每个家庭的第一个男孩是否出现即可。

代码实现

n,m=map(int, input().split())
data=[0]*(n+1)
for i in range(m):
    s=list(input().split())
    f=int(s[0])
    if s[1]=='M' and data[f]==0:
        print('Yes')
        data[f]=1
    else:
        print('No')

D - 1D Country

在这里插入图片描述

题目描述

有两个数组,每个数组对应的位置上分别记录村庄的位置以及村庄的人数。之后每次输入两个坐标然后输出这两个坐标之间的村庄的总人数

算法思路

前缀和预处理村庄人数,然后用bisect来找到左右两端点在村庄数组中的索引,最后计算出结果。

代码实现

from bisect import bisect_left, bisect_right
n = int(input())
x = list(map(int, input().split()))
p = list(map(int, input().split()))
qzh = [0] * (n + 1)
for i in range(n):
    qzh[i + 1] = qzh[i] + p[i]
q = int(input())
for _ in range(q):
    l, r = map(int, input().split())
    left_idx = bisect_left(x, l)
    right_idx = bisect_right(x, r)
    ans = qzh[right_idx] - qzh[left_idx]
    print(ans)

E - I Hate Sigma Problem

在这里插入图片描述

题目描述

输入n个数,计算出所有子序列中不重复元素的个数之和。

算法思路

这题如果用双重循环加set()来计算还是会超时。
于是用下面的算法:
把题目转换为求每一个元素给他所在的子序列贡献的值的和
假设是这样一组数
在这里插入图片描述
设输入的序列为data,我们用变量i作为data的下标从前往后遍历子集的起点,第一个数1为起点时他有下面这些子集。
在这里插入图片描述
设data的总长度为n不难发现以当前元素为起点时,子集的个数是 n + 1 − i n+1-i n+1i
这时候作为起点的1,给他所有子序列都贡献了一个唯一的数,于是答案加上6。
接着观察到第四个元素的时候,再次出现了元素1,如下图所示
在这里插入图片描述
蓝色表示的是以这个1为起点的子集,通过 n + 1 − i n+1-i n+1i可以算出有3个子序列,1为这三个子序列各贡献了一个唯一的元素。但是通过观察发现,他又为以2和3为起点的子序列(绿色和紫色)贡献了一个唯一的元素,而且绿色和紫色的子序列的个数分别与蓝色子序列的个数相同。于是我们可以得出下面的结论:
对于每一个数,先给以所有它为起点的子序列贡献1,然后找到当前位置和这个数上一次出现的位置之间的数,给这些数为起点且包含当前数的子序列贡献1。
于是推出下面的公式(设当前数上一次出现的位置为last,默认0)
每一个数的贡献为
( n − i + 1 ) ∗ ( i − l a s t ) (n-i+1)*(i-last) (ni+1)(ilast)

代码实现

n = int(input())
a = [0] * (n + 1)
b = [0] * (n + 1)
ans = 0
data=list(map(int, input().split()))
for i in range(1, n + 1):
    a[i] = int(data[i-1])
    ans += (n - i + 1) * (i - b[a[i]])
    b[a[i]] = i
print(ans)

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

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

相关文章

rust GUI框架Tauri入门——基于vanilla.js

文章目录 Tauri介绍Vite开始创建 Rust 项目 调用指令window.__TAURI_INVOKE__.invoke is undefined 问题参考资料JavaScript 模块VueVue RouteviteNuxt Tauri介绍 Tauri是一款用Rust构建的开源框架&#xff0c;用于创建轻量级、安全且高效的桌面应用程序。它将Rust的强大功能与…

Qt-QProgressBar显示类控件(27)

目录 描述 相关属性 使用 引入头文件机制 作用 描述 就是一个进度条&#xff0c;如下这个样子 相关属性 这里是一些属性 minimum进度条最⼩值maximum进度条最⼤值value进度条当前值 alignment ⽂本在进度条中的对⻬⽅式&#xff1a; • Qt::AlignLeft :左对⻬ • Qt::…

[Python学习日记-21] Python 中的字符编码(上)

[Python学习日记-21] Python 中的字符编码&#xff08;上&#xff09; 简介 ASCII 码 字符编码中的断句 GB2312 和 GBK 简介 在编程之路上&#xff0c;如果你不把编码问题搞清楚&#xff0c;那么它将像幽灵一般纠缠你整个职业生涯&#xff0c;各种灵异事件会接踵而来&#…

除了字符串前导的*号之外,将串中其它*号全部删除

要求 假定输入的字符串中只包含字母和*号。请编写函数fun&#xff0c;它的功能是:除了字符串前导的*号之外&#xff0c;将串中其它*号全部删除。在编写函数时&#xff0c;不得使用C语言提供的字符串函数。函数fun中给出的语句仅供参考。 例如&#xff0c;字符串中的内容为:-**…

文件格式转换:EXCEL和CSV文件格式互相转换

目录 1.EXCEl和CSV文件格式互相转换1.1首先安装所需的Python包1.2excel转换为csv代码如下:1.3csv转换为excel代码如下:由于excel文件在数学建模数据处理当中的局限性,我们通常把excel文件转换为csv文件来处理,下面是相关的代码,我直接封装成函数,你们直接调用即可,我会添…

Selenium基础入门:环境搭建、浏览器驱动配置及基本使用方法

目录 引言 一、Selenium环境搭建 1.1 Python环境准备 1.1.1 下载并安装Python 1.1.2 安装pip 1.2 Selenium库安装 1.3 浏览器驱动安装 1.3.1 ChromeDriver 1.3.2 GeckoDriver&#xff08;Firefox&#xff09; 1.3.3 其他浏览器驱动 1.4 IDE和插件&#xff08;可选&a…

免费AI播客生成:notebooklm可以生成播客的两个发言人谈论的内容,从各种来源如研究论文、文章

参考&#xff1a; https://notebooklm.google.com/ 可以上传文章链接&#xff0c;ai自动生成播客两人对话&#xff1a; 另外notebooklm他本身也是个rag知识库对话&#xff0c;可以直接聊天框对话

CorrMatch复现

复现结果–Full&#xff1a;81.78327847863439&#xff0c;成功 U2PL’s splits计算量太大&#xff0c;不建议复现

Ubuntu 20.04 解决 nvidia-smi 出错问题

目录 一、初始问题 二、解决方法 2.1 法一 2.2 法二 三、新的问题 3.1 解决方案 3.2 进一步解决 3.3 最后解决 一、初始问题 今天要在本机上装个环境时&#xff0c;运行了一下 nvidia-smi 突然遇到一个问题&#xff1a; Failed to initialize NVML: Driver/library ver…

Qt_按钮类控件

目录 1、QAbstractButton 2、设置带图标的按钮 3、设置带有快捷键的按钮 4、QRadioButtion&#xff08;单选按钮&#xff09; 4.1 QButtonGroup 5、QCheckBox 结语 前言&#xff1a; 按钮类控件是Qt中最重要的控件类型之一&#xff0c;该类型的控件可以通过鼠标的点击…

了解线程池

引出线程池&#xff1a; 假设小编是一个女生&#xff0c;小编处了一个对象&#xff0c;但是某一天小编不想和这个男生处对象了&#xff0c;但是小编还是想和别的男生处对象的&#xff0c;于是现在我就面临两个问题&#xff1a;一、怎么跟现任分手 二、开始物色新的对象&#…

软件安装攻略:Sublime Text 下载安装和使用教程

Sublime Text 下载安装和使用教程 Sublime Text是一个流行的跨平台文本编辑器&#xff0c;它具有以下一些主要功能和特点&#xff1a; &#xff08;1&#xff09;简洁的界面和快速的速度&#xff1a;Sublime Text拥有简约干净的界面&#xff0c;启动和响应速度很快。 &#…

Visual Studio打开项目的一些小技巧

Visual Studio(VS)是一款功能强大的集成开发环境&#xff0c;许多刚入门C/C的小白也会使用这款软件进行写代码&#xff0c;然而它的操作并不简单&#xff0c;下面将讲解一下VS打开项目文件的一些小技巧。 目录 &#x1f381;创建空项目 ❤️①点击“创建新项目” ❤️②点击“…

Unity中InputField一些属性的理解

先看代码&#xff1a; using UnityEngine; using UnityEngine.UI;public class TestInput : MonoBehaviour {[SerializeField]InputField inputField;void Start(){Debug.Log(inputField.text);Debug.Log(inputField.text.Length);Debug.Log(inputField.preferredWidth);Debug…

Netty笔记02-组件EventLoop

文章目录 EventLoop概述EventLoop 的概念EventLoop 的作用EventLoop 的生命周期EventLoopGroupEventLoop 的工作原理总结 代码示例&#x1f4a1; 优雅关闭演示 NioEventLoop 处理 io 事件解决work中的channel读操作耗费时间过长&#xff0c;影响其他channel(客户端)的问题&…

开源链动 2+1 模式 AI 智能名片与 S2B2C 商城小程序在用户运营中的应用

摘要&#xff1a; 本文深入探讨了用户运营中不同用户阶段的特点及策略&#xff0c;引入“开源链动 21 模式 AI 智能名片 S2B2C 商城小程序”&#xff0c;分析其在用户运营各个阶段的作用和价值&#xff0c;旨在为企业提供更高效的用户运营方案&#xff0c;实现用户价值的最大化…

Spring 框架——@Async 注解

目录 1.同步调用与异步调用1.1.同步调用1.2.异步调用1.3.总结 2.注解 Async 介绍2.1.用在方法上2.2.用在类上 3.使用演示3.1.在启动类或者配置类上增加 EnableAsync 注解3.2.在异步方法上增加 Async 注解3.3.调用异步方法3.4.测试3.5.其它说明 4.注意事项4.1.Async 注解失效的常…

【Qt绘图】—— 运用Qt进行绘图

目录 &#xff08;一&#xff09;基本概念 &#xff08;二&#xff09;绘制各种形状 2.1 绘制线段 2.2 绘制矩形 2.3 绘制圆形 2.4 绘制文本 2.5 设置画笔 2.6 设置画刷 &#xff08;三&#xff09;绘制图片 3.1 绘制简单图片 3.2 平移图片 3.3 缩放图片 3.4…

Linux 手动安装Ollama

Linux 离线安装Ollama 前言 不知道为什么 在阿里云服务器上 执行curl -fsSL https://ollama.com/install.sh | sh一键安装 非常慢 所以只能手动装了 1.到 https://ollama.com/install.sh 下载安装执行文件 修改其中 下载和安装部分代码 if curl -I --silent --fail --location…

Python数据分析-Numpy快速入门

一、什么是Numpy 二、 创建 Numpy ndarray对象 三、数组中的维度 1.各种维度数组 2.检查维度数 3.创建更高维度的数组 四、数组索引 1.访问数组元素 2.访问2-D数组元素 其他维度的同理 3.负索引 五、数据裁剪&#xff1a;要头不要尾 1.裁剪数组 demo&#xff1a; 2.负裁…