洛谷【算法1-1】模拟与高精度 python版

洛谷题单,蓝桥备赛
题单链接

未完待续… 预计 2025年2月26日 前完成

进度

【2025年2月19日19点33分】写了前俩,歇了
【2025年2月21日】写了俩,太 ez
【2025年2月22日18点51分】写了四,太 ez
【2025年2月23日】1道
【2025年2月24日】开学快乐🐱
【2025年2月25日】听说要在明天前写完【18点09分,记】啊啊啊还有两题今天晚上一定要写完,要争气啊(最近刷题蛮热心,SCI是一点没搞啊)

题解与碎碎念

P1042 [NOIP 2003 普及组] 乒乓球

题面

在这里插入图片描述在这里插入图片描述
原题链接

小结

  1. 读入处理的一般(蒟蒻刚从C++转python,见谅)
  2. 输出处理的很冗余丑陋(勉强能满足输出条件)
  3. 为什么一定要匹配 W L E,用 else 死了一半

槽点/易错点:

  1. 最后一个数据点,在匹配E,0:0 也是要输出的,亏我多虑卡 90(我恨
  2. 考虑只有 E 的情况
  3. (可能需要考虑)没有E,用字符串末尾控制结束,我用的是把 input_data\n 都替换成空,数它的 length

ac代码

import sys

input_data = sys.stdin.read()
input_data = input_data.replace("\n", "")


def WorL(n):
    Wcount, Lcount = 0, 0
    head = 1

    length = len(input_data)
    # print(f"length= {length}")
    for index, char in enumerate(input_data):
        # print(f'idx= {index}')
        # print(char)
        if char == "E":
            if head == 1:
                print(f"{
     Wcount}:{
     Lcount}", end="")
            else:
            # 槽点1,意思是这里不用判断是不是0:0从而不输出
                print(f"\n{
     Wcount}:{
     Lcount}", end="")

            break
        elif char == "W":
            Wcount += 1
        elif char == "L":
            Lcount += 1

        if index == length - 1:
            if head == 1:
                print(f"{
     Wcount}:{
     Lcount}", end="")
            else:
                if not(Wcount == 0 and Lcount == 0):
                    print(f"\n{
     Wcount}:{
     Lcount}", end="")
            break

        if max(Wcount, Lcount) >= n and abs(Wcount - Lcount) >= 2:
            if head == 1:
                print(f"{
     Wcount}:{
     Lcount}", end="")
                head = 0
            else:
                print(f"\n{
     Wcount}:{
     Lcount}", end="")
            Wcount, Lcount = 0, 0


WorL(11)
print("\n")
WorL(21)

在这里插入图片描述

P2670 [NOIP 2015 普及组] 扫雷游戏

题面

在这里插入图片描述
在这里插入图片描述
原题链接

小结

ez(就是python不熟悉,写的有点累

ac代码

import sys

firstLine = sys.stdin.readline().strip()
N, M = map(int, firstLine.split())

mineFiled = []

for _ in range(N):
    line = sys.stdin.readline().strip()
    mineFiled.append(line)

for i in range(N):
    mineFiled[i] = '?' + mineFiled[i] + '?'

addRow = '?' * (M + 2)
mineFiled.insert(0, addRow)
mineFiled.append(addRow)

ans = [[0] * M for _ in range(N)]


def sumRegion(I, J, matrix):
    # print(matrix)
    sum = 0
    for i in range(I - 1, I + 2):
        for j in range(J - 1, J + 2):
            # print(f'i= {i}, j= {j}')
            if matrix[i][j] == '?':
                sum += 1
    return 9 - sum


for i in range(1, N + 1):
    # print(mineFiled[i])
    for j in range(1, M + 1):
        if mineFiled[i][j] == '?':
            # print(f'__i= {i}, j= {j}')
            ans[i - 1][j - 1] = sumRegion(i, j, mineFiled)
        else:
            ans[i - 1][j - 1] = -1

# print(ans)

for i in range(0, N):
    for j in range(0, M):
        if ans[i][j] == 0-1:
            print("*", end="")
        else:
            print(ans[i][j], end="")
    print("")

在这里插入图片描述

P1563 [NOIP 2016 提高组] 玩具谜题

题面

略(太 ez 了)

原题链接

小结

太 ez,模拟一下就好了

ac代码

import sys

def reCount(current, face, l0r1, allC, count):
    if face == 0:  # face inter
        if l0r1 == 0:  # 左数
            current = (current + allC - count) % allC
        else:
            current = (current + count) % allC
    else:
        if l0r1 == 1:
            current = (current + allC - count) % allC
        else:
            current = (current + count) % allC

    return current


firstLine = sys.stdin.readline().strip()
N, M = map(int, firstLine.split())

bots = []
for i in range(N):
    line = sys.stdin.readline().strip()
    parts = line.split()
    data = (int(parts[0]), parts[1])
    bots.append(data)
# print(bots)

current = 0
rules = []
for i in range(M):
    line = sys.stdin.readline().strip()
    # print(line)
    parts = line.split()
    parts = [int(parts[0]), int(parts[1])]
    rules.append(parts)

for i in range(M):
    #     # def reCount(current, face, l0r1, allC, count):
    current = reCount(current, bots[current][0],
                      rules[i][0], N, rules[i][1])
print(f"{
     bots[current][1]}")

在这里插入图片描述

P1601 A+B Problem(高精度)

题面

就是最简单的高精度加法(没有负数)
原题链接

小结

ez,太 ez
才知道python直接支持高精度
“Python的整数类型没有固定的大小限制,它会根据需要动态扩展以存储任意大的整数。”

ac代码

import sys

line1 = sys.stdin.readline().strip()
line2 = sys.stdin.readline().strip()
# line1 = line1[::-1]
# line2 = line2[::-1]

length = max(len(line1), len(line2)) + 1

a = [0] * length
b = [0] * length

abeg = length - len(line1)
for i in range(len(line1)):
    a[abeg] = line1[i]
    abeg += 1

bbeg = length - len(line2)
for i in range(len(line2)):
    b[bbeg] = line2[i]
    bbeg += 1

ans = [0] * length
for i in range(length - 1, -1, -1):
    ans[i] += int(a[i]) + int(b[i])
    if ans[i] > 9:
        ans[i - 1] = 1
        ans[i] = ans[i] - 10

if ans[0] != 0:
    print(ans[0], end="")
for i in range(1, length):
    print(ans[i], end="")

在这里插入图片描述

P1303 A*B Problem(高精度)

题面

高精度乘法
原题链接

小结

ez,公式 ans[i + j] += (int(a[i]) * int(b[j]))
犯了蠢,沿用了加法的

if ans[i] > 9:
    ans[i - 1] = 1
    ans[i] = ans[i] - 10

其实是

if ans[i] > 9:
    ans[i - 1] += (ans[i] // 10)
    ans[i] %= 10

才知道,python直接支持高精度
“Python的整数类型没有固定的大小限制,它会根据需要动态扩展以存储任意大的整数。”

ac代码

import sys

line1 = sys.stdin.readline().strip()
line2 = sys.stdin.readline().strip()

length = max(len(line1), len(line2)) + 1
abeg = length - len(line1)
a = 
### 关于 P2670 的 Python 解决方案 对于上的题目 P2670,虽然未直接提供该题的具体描述或官方解答链接,可以基于平台其他题目解决思路给出一般性的建议和可能适用的方法。 针对算法竞赛中的问题求解,尤其是涉及路径寻找或者最优化类的问题,广度优先搜索(BFS)通常是较为合适的选择之一。BFS能够保证找到从起点到终点的最短路径,在处理类似迷宫探索、图遍历等问题时表现良好[^1]。 考虑到时间复杂度的要求以及Python运行效率相对较低的情况,实现过程中需要注意: - 使用队列数据结构来辅助完成层次遍历; - 尽量减少不必要的计算开销,比如提前终止条件判断等; - 对访问过的节点做标记以避免重复访问造成性能浪费; 下面是一个简单的伪代码框架用于演示如何构建此类问题的基础逻辑: ```python from collections import deque def bfs(start, end): queue = deque([start]) visited = set() while queue: current = queue.popleft() if current == end: return True for neighbor in get_neighbors(current): if neighbor not in visited: visited.add(neighbor) queue.append(neighbor) return False def get_neighbors(position): neighbors = [] # Define logic to generate valid neighboring positions based on problem constraints. return neighbors ``` 此模板可以根据具体问题调整`get_neighbors()`函数内部定义邻居位置的方式以及其他细节部分,从而适应不同类型的挑战需求。 为了更精确地帮助理解并解决问题P2670,强烈推荐查阅官方文档获取完整的背景信息和技术要求说明,并尝试按照上述指导原则设计具体的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值