题目:http://codeforces.com/problemset/problem/732/E

题目大意:

有n台电脑(computer)和m个插座(socket),两者均有一个power值,分别为 ai 和 bi ,只有当两者的power值相等时才可以匹配成功。当然,还有足够多个适配器(adapters)可用,插座每接一个适配器,bi 就会减半(取上整)。求最多可匹配多少电脑和插座,以及该种情况下所需要的最少的适配器数量。如有多种方案,输出其中一种即可。

思路:

因为这个题的输出都要用到下标(或编号),所以分别用multimap或pair存储电脑或插座的power值和对应的下标,从最小的插座power开始,匹配对应的电脑power,如果存在则记录,如果无匹配,则将插座power折半继续匹配直到值为1都未匹配成功,那么就说明该插座无论如何都无法匹配到电脑。这样可以使得当前情况下能够匹配到最大的电脑数量而且用最少的适配器,至于查找匹配自然不能遍历,可以将电脑的power存入set容器中进行find查找,效率会高一点,搜索复杂度为logN。

代码如下:

 #include<iostream>
#include<algorithm>
#include<utility>
#include<set>
#include<map>
using namespace std; const int MAX = 2e5 + ; multimap<int, int> P; //电脑与下标对应
multiset<int> S; //存放电脑power值,用set方便查找
pair<int, int> Sockets[MAX]; //插座与下标对应
int RESULT1[MAX], RESULT2[MAX]; int main()
{
int N, M, pi, si, c = , u = ;
cin >> N >> M;
for (int i = ; i <= N; ++i)
{
cin >> pi;
S.insert(pi);
P.insert(make_pair(pi, i));
}
for (int i = ; i <= M; ++i)
{
cin >> Sockets[i].first;
Sockets[i].second = i;
}
sort(Sockets + , Sockets + M + ); for (int i = , num = ; i <= M; ++i, num = )
while ()
{
multiset<int>::iterator set_it = S.find(Sockets[i].first);
if (set_it != S.end())
{
multimap<int, int>::iterator map_it = P.find(Sockets[i].first);
RESULT1[Sockets[i].second] = num;
RESULT2[(*map_it).second] = Sockets[i].second;
c++; u += num;
S.erase(set_it), P.erase(map_it);
break;
}
if (Sockets[i].first == )break;
num++;
Sockets[i].first = (Sockets[i].first + ) / ;
}
cout << c << " " << u << endl;
for (int i = ; i <= M; ++i)cout << RESULT1[i], i == M ? cout << endl : cout << " ";
for (int i = ; i <= N; ++i)cout << RESULT2[i], i == N ? cout << endl : cout << " ";
}

感谢您的阅读,生活愉快~

Sockets CF732E set map的更多相关文章

  1. Java网络编程之TCP

    Java网络编程之TCP ​ TCP主要需要两个类:Socket和ServerSocket,Socket是客户端连接服务器时创建,参数需要指定服务器的ip和端口,ServerSocket是服务器端创建 ...

  2. Code Forces Gym 100886J Sockets(二分)

    J - Sockets Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Valera ...

  3. Sockets

    Sockets time limit per test 2 seconds memory limit per test 256 megabytes input standard input outpu ...

  4. PHP 调用 Go 服务的正确方式 - Unix Domain Sockets

    * { color: #3e3e3e } body { font-family: "Helvetica Neue", Helvetica, "Hiragino Sans ...

  5. [Real World Haskell翻译]第27章 网络通信和系统日志 Sockets and Syslog

    第27章 网络通信和系统日志 Sockets and Syslog 基础网络 在本书的前面几章,我们讨论了运转在网络上的服务.其中的两个例子是客户端/服务器架构的数据库和Web服务.当需要制定一个新的 ...

  6. Gym 100886J Sockets 二分答案 + 贪心

    Description standard input/outputStatements Valera has only one electrical socket in his flat. He al ...

  7. Codeforces Round #377 (Div. 2) E. Sockets

    http://codeforces.com/contest/732/problem/E 题目说得很清楚,每个电脑去插一个插座,然后要刚好的,电脑的power和sockets的值相同才行. 如果不同,还 ...

  8. 【20.69%】【codeforces 732E】Sockets

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  9. mapreduce中一个map多个输入路径

    package duogemap; import java.io.IOException; import java.util.ArrayList; import java.util.List; imp ...

随机推荐

  1. Python3中urllib使用与源代码

    Py2.x: Urllib库 Urllin2库 Py3.x: Urllib库 变化: 在Pytho2.x中使用import urllib2---对应的,在Python3.x中会使用import url ...

  2. bzoj 1044 [HAOI2008]木棍分割(二分+贪心,DP+优化)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1044 [题意] n根木棍拼到一起,最多可以切m刀,问切成后最大段的最小值及其方案数. ...

  3. 20155301 2016-2017-2 《Java程序设计》第5周学习总结

    20155301 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 1.1try.catch关键词,在用户不小心输入错误的时候,程序会出现错误信息,将代表错误的 ...

  4. Android获取手机分辨率DisplayMetircs类

    关于Android中手机分辨率的使用 Android 可设置为随着窗口大小调整缩放比例,但即便如此,手机程序设计人员还是必须知道手机屏幕的边界,以避免缩放造成的布局变形问题. 手机的分辨率信息是手机的 ...

  5. JDK1.8源码LinkedList

    引用博文链接 : https://www.cnblogs.com/leskang/p/6029780.html LinkedList继承了 AbstractSequentialList抽象类,而不是像 ...

  6. 【算法】Base64编码

    1.说明 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法. 2.编码 ASCII码 -> 十六进制码 -> ...

  7. CentOS时区GMT修改为CST

    GMT:格林尼标准时间 北京时间=GMT时间+8小时 [root@sa~]# date -R 查看目前服务器的时间标准 [root@sa~]# vi /etc/sysconfig/clock 将ZON ...

  8. Linux MySQl 5.7.17 MySQL ERROR 1366(HY000):Incorrect string value 解决方法

    MySQL ERROR 1366(HY000):Incorrect string value,在往数据库中插入中文的时候会出现. 这也就是编码问题,网上大部分都是说设置下配置文件中的设置,而可悲的是在 ...

  9. Linux禁止ping的俩种方法【转】

    Linux禁止ping以及开启ping的方法   Linux默认是允许Ping响应的,系统是否允许Ping由2个因素决定的:A.内核参数,B.防火墙,需要2个因素同时允许才能允许Ping,2个因素有任 ...

  10. An overview of gradient descent optimization algorithms (更新到Adam)

    Momentum:解快了收敛速度,同时也减弱了SGD的波动 NAG: 减速了Momentum更新参数太快 Adagrad: 出现频率较低参数采用较大的更新,对于出现频率较高的参数采用较小的,不共用一个 ...