河南萌新联赛2025第(三)场:河南理工大学

链接:河南萌新联赛2025第(三)场:河南理工大学_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ

预估难度:

简单:B E G H K

中等:A F

 

B.  上海保卫战

 示例一:

输入:

5

输出:

2

说明:

第一轮 n = 5 的最小质除数是5,返回 0 到达第二轮第一步。
第二轮 n = 0,满足结束条件,退出函数。
因此输出 2 。 

 示例二:

输入:

4

输出:

3

备注: 

 函数哪怕只运行一步也算运行了一轮

 思路分析:

这段代码的核心目标是计算将一个整数 n通过特定操作逐步减到 0所需的最少操作次数。操作规则是:每次减去当前数的最小素因子(如果是偶数则固定减2),直到 n归零。仅仅这样的话,运行会超时,需要优化一下,就是当n减到偶数时直接加上此时的n/2就可以了,没必要再调用函数了,函数里面for就可以值遍历奇数就可以了。

实现代码:
 

#include<bits/stdc++.h>
using namespace std;
#define int long long 
#define endl '\n'     
#define pii pair<int,int>  
#define fi first       
#define se second         
const int N=101;       
// 函数:suuu(x) - 返回x的最小素因子
int suuu(int x)
{
    if(x==0) return 0;    
    if(x%2==0) return 2;  // 如果x是偶数,最小素因子是2
    
    // 检查奇数因子,从3开始,步长为2(跳过偶数)
    for(int i=3; i<=x/i; i+=2)  
    {
        if(x%i==0)        
            return i;     // 返回i作为最小素因子
    }
    return x;  // 如果x是素数,返回x本身
}


void slove(){
    int n, ans=1;  
    cin>>n;       
    
    while(n)       
    {
        n -= suuu(n);  // 减去n的最小素因子
        ans++;         // 操作次数加1
        
        // 如果剩余n是偶数,直接处理所有2的因子
        if(n%2==0)
        {
            ans += n/2;  
            break;      
        }
    }
    cout<<ans; 
}


signed main(){
    ios::sync_with_stdio(0); 
    cin.tie(0);              
    cout.tie(0);
    
    int _=1;              
    //cin>>_;               
    while(_--)               
        slove();              
    return 0;
}

E. 星际争霸

题目描述:

在星际争霸2游戏中,神族有一种单位叫做追猎者,人族有一种建筑叫做行星要塞,有一种通用资源叫做晶体矿,每个行星要塞内都保存着一定量的晶体矿。

现在你有 ss 只追猎者,每只都有一定的攻击力 aa 。人族有 bb 个行星要塞,每个行星要塞都有一定的防御能力 dd 和一定量的晶体矿 gg 

追猎者可以攻击所有防御力小于等于其攻击力的行星要塞,与此同时,该建筑的所有晶体矿都会被抢走。

请你求出每只追猎者能抢到的最大晶体矿总数。

注意:这是一个模拟的场景,并没有真正攻击行星要塞,也就是说追猎者之间不会相互影响结果。

注意输出要求答案放在一行中!

示例一:

输入:

5 4
1 3 5 2 4
0 1
4 2
2 8
9 4

 输出:

1 9 11 9 11

说明:

第一只追猎者只能攻击第一个行星要塞。  

第二只追猎者可以攻击第一个和第三个行星要塞。 &nbs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值