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;
}

做了两个剪枝优化。

经验:

可以优化尽量优化。

相关推荐
来一碗刘肉面3 分钟前
什么是双端队列
数据结构·链表
爱刷碗的苏泓舒6 分钟前
FFRT:固定失败率比率检验、宽巷模糊度固定及 Ratio Test
算法·相位偏差·模糊度固定·ppp-ar·ffrt·ratio test·wlnl
小园子的小菜22 分钟前
深入理解 JVM 垃圾回收:从对象判定、回收算法到经典收集器全解析
jvm·算法
2601_9545267532 分钟前
【硬核长文】从卡门涡街物理方程到边缘网关温压补偿算法:工业蒸汽测控实战,深度解密靠谱的涡街流量计厂家有哪些
算法
吞下星星的少年·-·1 小时前
牛客技能树:区间翻转
算法·滑动窗口
流浪0011 小时前
数据结构篇(五):线性表——栈
数据结构·c++·算法
拂拉氏2 小时前
【知识讲解】 链式哈希表的实现与unordered_map和unordered_set的封装
数据结构·哈希算法·散列表
haolin123.2 小时前
数据结构--二叉树
数据结构
tkevinjd2 小时前
力扣148-排序链表
算法·leetcode·链表
不如语冰2 小时前
AI大模型入门-参数的传递
数据结构·人工智能·pytorch·python