2025第四届大学生算法挑战赛(进阶训练1) A-E 题解报告

前言

这是第四届大学生算法挑战赛的练习赛系列,这个比赛是国家一级协会的。

这章是进阶训练1的A-E题,感觉还是蛮基础的。

在这里插入图片描述


题解

第四届大学生算法挑战赛 进阶训练1

A. 小理养鱼

思路: 博弈 + 斐波那契数组

省流描述: 经典的羊狼博弈,即1只羊,N只狼,狼吃羊会变羊,求狼是否能吃羊。

可以发现当

  1. n为奇数时,可以吃
  2. n为偶数时,不可以吃

而繁衍相关,打表可以发现呈现经典的排列

1, 1,  2, 3,  5, 8, 13, 21, 34, 55, 89, ...

这不就是斐波那契数列吗?

其分布,呈现 2奇数+1偶数周期出现

这题需要注意有多行输入,遇到EOF为止

# coding=utf-8
import math

def solve():
    n = int(input())
    r = n // 3 * 2 +  (n % 3)
    print (r)

try:
    while True:
        solve()
except Exception:
    pass

不过赛氪OJ卡python,所以这题得用c++才行

#include <iostream>
using namespace std;

void solve(int64_t n) {
    int64_t r = (n / 3) * 2 + (n % 3);
    cout << r << endl;
}

int main() {
    int64_t v;
    while (cin >> v) {
        solve(v);
    }
    return 0;
}

B. 约瑟夫环

思路: 暴力

数据规模较小,直接模拟即可

n, k, m = list(map(int, input().split()))

arr = list(range(n))

while len(arr) > 1:
    k = (k + m - 1) % len(arr)
    del arr[k]

print (arr[0])

C. 行列互换

技巧: python的zip操作

题意: 把3x3的矩阵置换

g = []
for _ in range(3):
    g.append(list(map(int, input().split())))
for r in zip(*g):
    print(*r, sep=' ')

D. 字符金字塔

思路: 构造+模拟
题意:构造指定大小的金字塔

c = input()

h = ord(c[0]) - ord('A') + 1

for i in range(h):
    s = [' '] * (i + h)
    for j in range(i+1):
        s[h - 1 - j] = s[h - 1 + j] = chr(ord('A') + i - j) 
    print (''.join(s))

代码的思路是确立中轴线,然后中心扩展


E. 小理的数列

在这里插入图片描述

思路: 打表找规律

打印 0~10

# 三列分别为n, n的二进制表达式, f(n)
0 0 0
1 1 1
2 10 1
3 11 2
4 100 1
5 101 2
6 110 2
7 111 3
8 1000 1
9 1001 2
10 1010 2

可以发现 f ( n ) = b i t _ c o u n t ( n ) f(n) = bit\_count(n) f(n)=bit_count(n), 也就是值n的二进制表达式中1的个数

f ( n ) = f ( m ) = x f(n)=f(m)=x f(n)=f(m)=x,

m 最小为 ( 1 < < m ) − 1 m最小为(1 << m) - 1 m最小为(1<<m)1

t = int(input())
for _ in range(t):
    v = int(input())
    n1 = bin(v)[2:].count('1')
    print (n1, (1 << n1) - 1)

写在最后

A-E题感觉非常的基础,顺带考察思维
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值