MC0550鱼肠剑试锋芒

伍子胥引荐专诸后,公子光为行刺之事,命专诸前往太湖,请名工铸造一柄短小锋利的宝剑,名曰"鱼肠剑"。剑成之后,需测试其分金断玉之能。

现有𝑛块精铁锭,其硬度分别为𝑎1∼𝑎𝑛。专诸需依次进行𝑞次试剑,每次试剑指定一个整数𝑥,表示鱼肠剑的斩切力度。每块铁锭的硬度𝑎𝑖将变为⌊𝑎𝑖/𝑥⌋,即其硬度被剑力整除后的整数部分。

请你帮助专诸计算,在每次试剑操作结束后,所有铁锭的硬度之和∑𝑖=1𝑛 𝑎𝑖为多少?

输入格式:

第一行两个整数𝑛,𝑞(1≤𝑛≤10^6,1≤𝑞≤10^6),整数之间用一个空格隔开。

第二行𝑛个整数𝑎1∼𝑎𝑛(1≤𝑎𝑖≤2000),整数之间用一个空格隔开。接下来𝑞行,每行一个整数𝑥(1≤𝑥≤10),表示一次操作。

输出格式:

输出

𝑞行,表示每次操作结束后的答案。

样例 1

输入:

5 3

6 6 7 9 10

2

1

2

输出:

18

18

7

超时代码

cpp 复制代码
#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n,q;
    cin>>n>>q;
    int a[n];
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    while(q--){
        int x;
        cin>>x;
        int sum=0;
        for(int i=0;i<n;i++){
            a[i]=floor(a[i]/x);
            sum+=a[i];
        }
        cout<<sum<<"\n";
    }
    return 0;
}

正确代码:

cpp 复制代码
#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n,q;
    cin>>n>>q;
    int a[n];
    int sum=0;
    for(int i=0;i<n;i++){
        cin>>a[i];
        sum+=a[i];
    }
    while(q--){
        int x;
        cin>>x;
        if(x==1||sum==0){
            cout<<sum<<"\n";
            continue;
        }
       sum=0;
        for(int i=0;i<n;i++){
            a[i]=floor(a[i]/x);
            sum+=a[i];
        }
        cout<<sum<<"\n";
    }
    return 0;
}

做了两个剪枝优化。

经验:

可以优化尽量优化。

相关推荐
yi0114 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
灯澜忆梦7 小时前
【面向对象编程C++】| 基础语法
java·c++·算法
禾小西7 小时前
Redis 数据结构:快速的 Redis 有哪些慢操作?
数据结构·数据库·redis
小蒋观天下7 小时前
专项方案:大场景港口AI安防、多干扰环境下的算法调优与落地实操
人工智能·深度学习·算法·安全·机器学习·计算机视觉·ai大模型
Evand J7 小时前
【电机滤波例程5】渐消因子自适应扩展卡尔曼滤波(EKF),MATLAB。PMSM负载突变下的状态估计。附下载链接
算法·matlab
H.莓飛7 小时前
【数据结构】二叉树_OJ题
linux·开发语言·数据结构·算法
好想像大佬一样能够ak所有8 小时前
Leetcode35.搜索插入位置
数据结构·算法·leetcode
aqiu1111118 小时前
【C++算法打怪专栏】LeetCode 165. 比较版本号(双指针与字符串流法)
c++·算法·leetcode
黄金龙PLUS8 小时前
如何基于置换算法来设计对称加密算法
算法·网络安全·密码学·哈希算法·同态加密
不会就选b8 小时前
算法日常・每日刷题--<动态规划>14
算法