当前位置: 首页 > news >正文

自己做竞猜网站挣钱吗广告推广接单平台

自己做竞猜网站挣钱吗,广告推广接单平台,推荐网站建设服务话术,网站建设前端切图题目 如果此题数据要小一点,那么我们可以用克鲁斯卡尔算法通过,但是这个数据太大了,空间会爆炸,时间也会爆炸。 我们发现,如果用 MST 做,那么很多边的边权都一样,我们可以整行整列地删除。 我…

题目

如果此题数据要小一点,那么我们可以用克鲁斯卡尔算法通过,但是这个数据太大了,空间会爆炸,时间也会爆炸。

我们发现,如果用 MST 做,那么很多边的边权都一样,我们可以整行整列地删除。

我们造一个样例解析一下:

+-+--+---+
| |  |   |
+-+--+---+
| |  |   |
| |  |   |
+-+--+---+

首先,我们删除第一列的栅栏:

+-+--+---+
| |  |   |
+ +--+---+
| |  |   |
| |  |   |
+-+--+---+

此时答案是 1 1 1

再删除第一排的栅栏:

+-+--+---+
|        |
+ +--+---+
| |  |   |
| |  |   |
+-+--+---+

此时答案是 3 3 3

我们继续删除第二列的栅栏:

+-+--+---+
|        |
+ +  +---+
| |  |   |
| |  |   |
+-+--+---+

此时答案是 5 5 5

我们继续删除第二行的栅栏:

+-+--+---+
|        |
+ +  +---+
|        |
|        |
+-+--+---+

此时答案是 9 9 9

我们把第三列的栅栏删除,由于之前删除的两行栅栏导致第三列栅栏少删除一个,不用删除。

你可以继续造更大的数据发现规律:

我们先把每一列,每一行的栅栏长度算出来,从小到达排序,然后用双指针算法,两个指针 i i i j j j,第一个记录统计到哪一行,第二个记录统计到哪一列,这两个变量的初始值应该为 2 2 2,然后把第一列,第一行栅栏删除。讨论时,如果我们当前讨论的行比列要短,就删除 m − j + 1 m-j+1 mj+1 个栅栏,因为之前删除的栅栏导致我们现在不用删除一些栅栏。反之,同理,就是 n − i + 1 n-i+1 ni+1 个栅栏。如果一个指针走完了,那么所有的都是联通的,就不用再循环了。时间复杂度 O ( n ) O(n) O(n),通过。

AC Code:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <list>
#include <set>
#include <map>
using namespace std;
int h, w, n, m;
int a[300000], b[300000];
long long a1[300000], b1[300000];
long long ans;int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> h >> w >> n >> m;for (int i = 1; i <= n; i ++) cin >> a[i];for (int i = 1; i <= m; i ++) cin >> b[i];sort(a + 1, a + n + 1);sort(b + 1, b + m + 1);n++;a[n] = h;m++;b[m] = w;for (int i = 1; i <= n; i ++) {a1[i] = a[i] - a[i - 1];}for (int i = 1; i <= m; i ++) {b1[i] = b[i] - b[i - 1];}sort(a1 + 1, a1 + n + 1);sort(b1 + 1, b1 + m + 1);
//	for (int i = 1; i <= n; i ++) {
//		cout << a1[i] << ' ';
//	}
//	cout << '\n';
//	for (int j = 1; j <= m; j ++) {
//		cout << b1[j] << ' ';
//	}
//	cout << '\n';int i = 2, j = 2;ans = a1[1] * (m - 1);ans += b1[1] * (n - 1);while (i <= n && j <= m) {if (a1[i] < b1[j]) {ans += a1[i] * (m - j + 1);i++;}else {ans += b1[j] * (n - i + 1);j++;}}cout << ans;return 0;
}
http://www.hengruixuexiao.com/news/24442.html

相关文章:

  • 白城网站开发nba最新新闻消息
  • 如何做网站安全加固厦门网站建设公司
  • 重庆重大新闻事件优化关键词快速排名
  • 呼和浩特建设工程安全管理网站个人建站
  • 白云区专业网站建设百度商城官网首页
  • 想在网上做开发网站接活儿百度指数下载手机版
  • 做网站前后端的发布流程百度竞价排名平台
  • 凡客网址百度seo按天计费
  • 微信连接微网站吗百度竞价sem入门教程
  • wordpress ts cdseo网站权重
  • 青州网站建设优化排名无线网络优化
  • wamp做的网站标签图标ks刷粉网站推广马上刷
  • 做啪啪网站商品营销推广的方法有哪些
  • 功能性网站建设上海网站排名seo公司哪家好
  • 官方网站后台怎样做超链接seo服务外包费用
  • 网站搭建合同范本8大营销工具指的是哪些
  • 清廉桂林网站创建网址链接
  • 怎么做网站黑链b2b电商平台
  • 东莞做网站seo长沙seo优化首选
  • 个人租车网站源码免费检测网站seo
  • 网站seo招聘上海网络推广培训学校
  • 做体力活的网站廊坊百度推广seo
  • 圆梦科技专业网站建设推广网站的文案
  • 网页版微信登陆入口深圳宝安seo外包
  • wordpress客户端制作广西seo关键词怎么优化
  • 芜湖网站建设 文库2023疫情第三波爆发时间
  • 主题 外贸网站 模板天津seo方案
  • 湖南常德最新疫情最新消息贵阳seo网站推广
  • 怎么做网站内部搜索功能免费的推广平台
  • 网站首页代码搜易网服务介绍