luogu P3819 松江1843路】的更多相关文章

题目描述 涞坊路是一条长L米的道路,道路上的坐标范围从0到L,路上有N座房子,第i座房子建在坐标为x[i]的地方,其中住了r[i]人. 松江1843路公交车要在这条路上建一个公交站,市政府希望让最多的人得到方便,因此希望所有的每一个的居民,从家到车站的距离的总和最短. 公交站应该建在哪里呢? 输入输出格式 输入格式: 第一行输入L.N. 接下来N行,每行两个整数x[i]和r[i]. 输出格式: 一个整数,最小的每个人从家到车站的距离的总和. 输入输出样例 输入样例#1: 100 3 20 3 5…
P3819 松江1843路sigema(r[i]*abs(x[i]-x[s]));令它最小,是带权中位数问题,s是带权中位数,s左边的r[i]之和+r[s]大于s左边的r[i]之和,反过来也成立.如果sum+r[i]>=总数/2,就break,就找到带权中位数了. 证明的话去百度,很好证明,因为没有理解价值,就没整理. #include<iostream> #include<cstdio> #include<queue> #include<algorithm…
P3819 松江1843路 题目描述 涞坊路是一条长L米的道路,道路上的坐标范围从0到L,路上有N座房子,第i座房子建在坐标为x[i]的地方,其中住了r[i]人. 松江1843路公交车要在这条路上建一个公交站,市政府希望让最多的人得到方便,因此希望所有的每一个的居民,从家到车站的距离的总和最短. 公交站应该建在哪里呢? 输入输出格式 输入格式: 第一行输入L.N. 接下来N行,每行两个整数x[i]和r[i]. 输出格式: 一个整数,最小的每个人从家到车站的距离的总和. 输入输出样例 输入样例#1…
P3819 松江1843路 题目描述 涞坊路是一条长L米的道路,道路上的坐标范围从0到L,路上有N座房子,第i座房子建在坐标为x[i]的地方,其中住了r[i]人. 松江1843路公交车要在这条路上建一个公交站,市政府希望让最多的人得到方便,因此希望所有的每一个的居民,从家到车站的距离的总和最短. 公交站应该建在哪里呢? 输入输出格式 输入格式: 第一行输入L.N. 接下来N行,每行两个整数x[i]和r[i]. 输出格式: 一个整数,最小的每个人从家到车站的距离的总和. 输入输出样例 输入样例#1…
https://www.luogu.org/problem/show?pid=3819 题目描述 涞坊路是一条长L米的道路,道路上的坐标范围从0到L,路上有N座房子,第i座房子建在坐标为x[i]的地方,其中住了r[i]人. 松江1843路公交车要在这条路上建一个公交站,市政府希望让最多的人得到方便,因此希望所有的每一个的居民,从家到车站的距离的总和最短. 公交站应该建在哪里呢? 输入输出格式 输入格式: 第一行输入L.N. 接下来N行,每行两个整数x[i]和r[i]. 输出格式: 一个整数,最小…
题目描述 涞坊路是一条长L米的道路,道路上的坐标范围从0到L,路上有N座房子,第i座房子建在坐标为x[i]的地方,其中住了r[i]人. 松江1843路公交车要在这条路上建一个公交站,市政府希望让最多的人得到方便,因此希望所有的每一个的居民,从家到车站的距离的总和最短. 公交站应该建在哪里呢? 输入输出格式 输入格式: 第一行输入L.N. 接下来N行,每行两个整数x[i]和r[i]. 输出格式: 一个整数,最小的每个人从家到车站的距离的总和. 输入输出样例 输入样例#1: 100 3 20 3 5…
松江1843路 思路: 三分: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 #define ll long long struct DataType { ll pi,val,sumval,sumpi; bool operator<(const DataType pos)const { return pi<pos.pi; } }; struct DataType ai[maxn]; ll…
[Luogu]P1613 跑路 一.题目 题目描述 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零.可是小A偏偏又有赖床的坏毛病.于是为了保住自己的工资,小A买了一个十分牛B的空间跑路器,每秒钟可以跑2^k千米(k是任意自然数).当然,这个机器是用longint存的,所以总跑路长度不能超过maxlongint千米.小A的家到公司的路可以看做一个有向图,小A家为点1,公司为点n,每条边长度均为一千米.小A想每天能醒地尽量晚,所以让你帮他算算,他最少需…
https://www.luogu.org/problem/show?pid=1613 看到2k就能想到倍增.用一个数组avai[i][j][k]表示点i与点j是否存在长2k的路径,则可以递推出avai[i][j][k]=any{avai[i][v][k-1]&avai[v][j][k-1]},初始值avai[i][i][0]=true.如果avai[i][j][k]==true,则在i点与j点加一条长1的路径.最后BFS或者直接Floyd跑一遍最短路径就可以了. #include <ios…
题目链接:https://www.luogu.org/problemnew/show/P2939 本来说是双倍经验题,跟飞行路线一样的,结果我飞行路线拿deque优化SPFA过了这里过不了了. 所以多学一种优先队列优化. #include <queue> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define ll long lon…