首页 > 其他分享 >CF732E Sockets 题解

CF732E Sockets 题解

时间:2023-07-14 11:24:14浏览次数:43  
标签:std log 题解 适配器 CF732E 插座 功率 include Sockets

功率是 \(x\) 的插座插入一个适配器后功率是 \(y\),功率是 \(y\) 的插座插入一个适配器后功率是 \(z\),那么相当于功率是 \(x\) 的插座插入两个适配器。
一个电脑可以用功率小的插座插入较少的适配器表达,也可以用功率大的插座插入较多的适配器表达。这里功率大的插座必然能表达出功率较小的插座。优先使用功率小的插座,就能把功率大的插座和较多的适配器尽可能的节省下来,所以这样是不劣的。
那就从小到大判断每一个插座是否可行:如果可行,就进行分配;如果不可行,那就插入若干个适配器使得能够分配为止;如果最终还是不能分配就跳过下一个。
使用 multimappair 可以很方便地维护。
初始每个插座可以使用 \([0,\log w]\) 个适配器,每次判断的复杂度为 \(\log n\),总共有 \(m\) 个插座,总复杂度是 \(\mathcal O(n\log n+m\log m+m\log n\log w)\)。采取 unordered_multimap 即可做到 \(\mathcal O(n+m\log m+m\log w)\)。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<map>
#define fi first
#define se second
using std::cin;using std::cout;
using pii=std::pair<int,int>;
constexpr int N=2e5+1;
int n,m,ans1,ans2,r1[N],r2[N];
std::multimap<int,int>s;
pii b[N];
signed main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	std::ios::sync_with_stdio(false);cin.tie(nullptr);
	cin>>n>>m;
	for(int i=1,x;i<=n;i++)
		cin>>x,s.emplace(x,i);
	for(int i=1;i<=m;i++)
		cin>>b[i].fi,b[i].se=i;
	sort(b+1,b+m+1);
	for(int i=1;i<=m;i++)for(int j=0;;j++)
		if(auto it=s.find(b[i].fi);it!=s.end()){
			r1[b[i].se]=j;
			r2[it->se]=b[i].se;
			ans1++;
			ans2+=j;
			s.erase(it);
			break;
		}else{
			if(b[i].fi==1)break;
			b[i].fi=(b[i].fi+1)/2;
		}
	cout<<ans1<<' '<<ans2<<'\n';
	for(int i=1;i<=m;i++)cout<<r1[i]<<' ';
	cout<<'\n';
	for(int i=1;i<=n;i++)cout<<r2[i]<<' ';
	return 0;
}

标签:std,log,题解,适配器,CF732E,插座,功率,include,Sockets
From: https://www.cnblogs.com/bxjz/p/CF732E.html

相关文章

  • 题解 [NOIP2015 提高组] 运输计划
    题目链接闲话:虽说是紫题,但慢慢想还是完全没有问题的。由于\(m\)个运输计划同时开始,所以耗费时间就是最慢的飞船耗费的时间(即最长时间)。考虑到题目让求最短时间,也就是最长的最短,可以二分。考虑二分最长时间(记作\(k\)),那么将所有路径分成两类,一类是原来耗费的时间就小于等于\(......
  • QOJ 6504. CCPC Final 2022 D Flower's Land 2题解
    QOJ6504.CCPCFinal2022DFlower'sLand2题解题意简述给你一个只含\(0,1,2\)的序列,相邻两个相同的数字可以直接消掉。询问包含两种区间所有数\(+1\)并对\(3\)取模。求一段区间能否用上述消除方式消完。样例输入8901211012245236168168236......
  • yarn : 无法加载文件 E:\nodejs\yarn.ps1,因为在此系统上禁止运行脚本。问题解决
    1.在电脑的开始菜单中,搜索PowerShell ,然后以管理员身份运行,如下所示:2.以管理员身份运行后,会出现命令窗口,接下来,输入命令get-ExecutionPolicy 查看权限,会看到它的返回值是 Restricted ,意思是当前是禁用的。3.执行命令:set-ExecutionPolicyRemoteSigned,没有报错就......
  • CF1846D Rudolph and Christmas Tree 题解
    Decription一颗圣诞树由\(n\)个底边为\(d\),高度为\(h\)的等腰三角形组成,每个三角形以\(y\)轴为对称轴,底边均平行于\(x\)轴,三角形有可能重叠。给出\(n,d,h\)以及每个三角形底边与\(x\)轴的距离,求该圣诞树的面积。Solution如图,这是一棵圣诞树,其由两部分组成,完整......
  • NOI2021 题解
    [NOI2021]轻重边转化一下题意:每次给一条链染色,查一条链从\(x\)到\(y\)有几条边两端颜色相同。那这个随便树剖线段树就好了。也可以LCT,码量可能要小点。#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<vector>usingnamespace......
  • 题解 最大加权矩阵
    题目链接虽然是一道橙题,但还是蕴含了重要算法思想——降维思想。如果是一维形式,即最大子段和,我们采取先求前缀和,并固定右端点,减去左边最小的办法求。对于这题,若固定了上下边界,则可以利用列的前缀和将其“压缩”为一维形式,再采取“最大子段和”的方式求解。如下面一个二维矩阵:......
  • 题解 醋溜便当
    题目链接题目让我们找出每个点是否存在长度\(\in[x,k\timesx]\)的回路,若找到一长度为\(a(0<a\lex)\)的回路,那么必然存在\(pa\in[x,k\timesx](p\in\Z)\),若找到长度\(\in[x,k\timesx]\)的回路,直接符合条件。所以问题转化为求是否存在\(\in[1,k\timesx]\)的回路,只需......
  • 【题解】CF gym 104337 G. Guess the Polynomial
    statement:https://codeforces.com/gym/104337/problem/G。即求\(f(x)=\sum\limits_{i=0}^{p-2}a_ix^i\),其中只有不超过\(n\)个\(a_i\)非\(0\)。记:\[\begin{aligned}A_{n}^{k}&=\sum_{i\equivk\pmod{n}}a_i=\frac{1}{n}\sum_{i=0}^{n-1}f(\omega_{n}^{......
  • CF1450C2 题解
    题目传送门再不写题解社贡要掉到\(0\)了。题目分析显然如果\(3\)个格子构成了满足获胜条件的情况,这\(3\)个格子模\(3\)的余数各不相同。那么我们将格子按模\(3\)的余数分为\(3\)类,只要保证相邻\(3\)个格子中有\(2\)个不同就行了,不需要动第\(3\)个。我们令......
  • Facetook Priority Wall 题解
    题目传送门一道模拟题。用一个map存储每个人的优先级因子,然后存进vector里进行排序。难点在于分辨\(X\)和\(Y\)与当前是什么操作。不过需要注意,只要出现了名字就需要输出,且我们认为与你没关系的人不加分。Code#include<bits/stdc++.h>#definelllonglong#define......