首页 > 其他分享 >[正常题解]Acwing.5308 公路

[正常题解]Acwing.5308 公路

时间:2024-03-29 14:55:52浏览次数:19  
标签:frac Acwing.5308 int 题解 long times therefore 公路 prev

​首先需要理解一个证明:

​ 假设我们有三个点,前两个点价格为\(a_1,\ a_2\),距离为\(v_1,\ v_2\)

1.png

那么就有式子:\(\frac{a_1 \times v_1}{d} + \frac{a_2 \times v_2}{d}\ 式①\),和式子\(\frac{a_1 \times v_1}{d} + \frac{a_1 \times v_2}{d} \ 式子②\)

$\rightarrow\frac{1}{d} (a_1 \times v_1+ a_2 \times v_2) => 总和 <=\frac{1}{d} (a_1 \times v_1+ a_1 \times v_2) $

假设\(a_1 > a_2\)

\(\therefore a_1 \times v_2 > a_2\times v_2\)

\(\therefore 式①>式②\)

假设\(a_1 < a_2\)

\(\therefore a_1 \times v_2 < a_2 \times v_2\)

\(\therefore 式①<式②\)

​ 从这个推论可以得出:我们实际上是在求一个油价最长下降子序列,并且这个序列必须从1号位开始。

根据以上结论可以先暂时有以下代码:

#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
const int N = 100010;
int n, d;
int v[N], vs[N], a[N];
queue<int> p;
int main()
{
    scanf("%d%d", &n, &d);
    for(int i=2; i<=n; i++)
    {
        scanf("%d", &v[i]);
        vs[i] = vs[i-1] + v[i];
    }
    int less = 1e9;
    for(int i=1; i<=n; i++)
    {
        scanf("%d", &a[i]);
        if(less > a[i])
        {
            less = a[i];
            p.push(i);
        }
    }
    long long res = 0;
    int prev = p.front();
    p.pop();
    while(!p.empty())
    {
        int temp = p.front();
        p.pop();
        long long dis = vs[temp] - vs[prev];
        res += dis * a[prev];
        prev = temp;
    }
    cout<<res / d<<endl;
    return 0;
}

​ 但是我们发现距离正确答案差了一点点(样例79,程序77)按照常识来说我们离正确答案挺近的了。问题在哪里呢?

​ 问题在于油是可以买多用不完的,所以我们的d不能在答案的时候才加回来,所以需要在处理过程里买足了再计算剩多少。

​ 但是我要变成Lazy Man了,这个题解就这样发布了吧。

标签:frac,Acwing.5308,int,题解,long,times,therefore,公路,prev
From: https://www.cnblogs.com/ComputerEngine/p/18103858

相关文章

  • CF1184E1题解
    CF11841E1&blog尽然想让第一条边最大且这条边在最小生成树中,那么这条边就需要尽量晚。但是假如加上一条边\(i\)可以使\(u_1\)和\(v_1\)联通并且第\(w_i\lew_1\)那么我们就会舍弃原本第一条边,使用第\(i\)条边。所以第一条边的比安全一定小于等于所有么满足上述条......
  • 2023年全国青少年信息素养大赛 第9届Python编程挑战赛北京赛区(小学组)复赛试题解析
    2023年全国青少年信息素养大赛第9届Python编程挑战赛北京赛区(小学组)复赛试题解析T1.求余数题目描述:输入一个正整数,输出这个整数除以5的余数。输入描述:输入一行一个正整数输出描述:输出这个整数除以5的余数样例1:输入:12输出:2#示例代码n=int(input())print(n%5)......
  • 【洛谷 P8738】[蓝桥杯 2020 国 C] 天干地支 题解(字符串+数学+模运算)
    [蓝桥杯2020国C]天干地支题目描述古代中国使用天干地支来记录当前的年份。天干一共有十个,分别为:甲(jiǎ)、乙(yǐ)、丙(bǐng)、丁(dīng)、戊(wù)、己(jǐ)、庚(gēng)、辛(xīn)、壬(rén)、癸(guǐ)。地支一共有十二个,分别为:子(zǐ)、丑(chǒu)、寅(yín)、卯(mǎo)、辰(chén)、巳(sì)、午(wǔ......
  • 【洛谷 P8654】[蓝桥杯 2017 国 C] 合根植物 题解(并查集)
    [蓝桥杯2017国C]合根植物题目描述w星球的一个种植园,被分成m×nm\timesnm×n个小格子(东西方向......
  • FM调频及应急广播公路隧道覆盖系统
    一:工作原理   1:FM调频及应急广播安全管控公路隧道覆盖系统的组成包括近端机和远端机,接收天线开路接收空中无线信号经避雷器隔离防雷,经滤波器滤波,过滤出纯净的FM调频广播信号送至近端机的低噪放进行信号放大由数字中频处理单元对其进行数字中频处理将模拟信号转换为数字......
  • 启动应用程序出现FirewallAPI.dll找不到问题解决
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个FirewallAPI.dll文件(挑选合适的版本文件)把......
  • 启动应用程序出现fthsvc.dll找不到问题解决
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个fthsvc.dll文件(挑选合适的版本文件)把它放......
  • 启动应用程序出现fontext.dll找不到问题解决
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个fontext.dll文件(挑选合适的版本文件)把它放......
  • Leetcode 第 126 场双周赛题解
    Leetcode第126场双周赛题解Leetcode第126场双周赛题解题目1:3079.求出加密整数的和思路代码复杂度分析题目2:3080.执行操作标记数组中的元素思路代码复杂度分析题目3:3081.替换字符串中的问号使分数最小思路代码复杂度分析题目4:3082.求出所有子序列的能量和思......
  • Leetcode 第 388 场周赛题解
    Leetcode第388场周赛题解Leetcode第388场周赛题解题目1:3074.重新分装苹果思路代码复杂度分析题目2:3075.幸福值最大化的选择方案思路代码复杂度分析题目3:3076.数组中的最短非公共子字符串思路代码复杂度分析题目4:3077.K个不相交子数组的最大能量值思路代码......