题目链接:http://codeforces.com/contest/732/problem/E

题意:有n台计算机,m个插座,每台计算机有一个值a[i],每个插座有一个值b[i],每个插座最多只能对应一台计算机,且只有a[i] == b[j]时才能配对。现有无限台适配器,适配器能使b[i]减半,求最多能使多少计算机与插座配对(c),以及对应的最小的适配器个数(u)(即先考虑c最大,再使u最小)。

思路:先对计算机和插座按值排序,不断减半,发现能配对就配对。

 #include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + ;
int a[N],b[N],c,u;
struct node
{
int val,id;
node(){}
node(int v,int i) : val(v),id(i) {}
bool operator < (const node &t)
{
if(val != t.val)
return val < t.val;
return id < t.id;
}
}p[N],s[N];
map <int,int> mp;//计算机值出现的次数
int main()
{
int n,m;
scanf("%d %d",&n,&m);
for(int i = ; i <= n; i++)
{
scanf("%d",&p[i].val);
p[i].id = i;
mp[p[i].val]++;
}
sort(p + , p + n + );
for(int i = ; i <= m; i++)
{
scanf("%d",&s[i].val);
s[i].id = i;
}
sort(s + , s + m + );
for(int i = ; i <= m; i++)
{
for(int j = ; j < ; j++)
{
if(mp.count(s[i].val))//发现可能匹配
{
int t = lower_bound(p + , p + n + , node(s[i].val,)) - p + mp[s[i].val] - ;//找到位置(由于有可能有多个相同的值,这里先从最后一个开始往前推)
if(p[t].val == s[i].val && !b[p[t].id])//值相等 && 该计算机还未匹配
{
b[p[t].id] = s[i].id;
mp[s[i].val]--;//数量-1
a[s[i].id] = j;
c++;
u += j;
break;
}
}
s[i].val = (s[i].val + ) >> ;
}
}
printf("%d %d\n",c,u);
for(int i = ; i <= m; i++)
printf("%d ",a[i]);
printf("\n");
for(int i = ; i <= n; i++)
printf("%d ",b[i]);
return ;
}

codeforces 732E(贪心)的更多相关文章

  1. Codeforces 732e [贪心][stl乱搞]

    /* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给n个插座,m个电脑.每个插座都有一个电压,每个电脑都有需求电压. 每个插座可以接若干变压器,每个变压器可以使得电压变为x/2上取整. 有无限个变 ...

  2. CodeForces - 893D 贪心

    http://codeforces.com/problemset/problem/893/D 题意 Recenlty Luba有一张信用卡可用,一开始金额为0,每天早上可以去充任意数量的钱.到了晚上, ...

  3. Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) Problem D (Codeforces 831D) - 贪心 - 二分答案 - 动态规划

    There are n people and k keys on a straight line. Every person wants to get to the office which is l ...

  4. Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) Problem D (Codeforces 828D) - 贪心

    Arkady needs your help again! This time he decided to build his own high-speed Internet exchange poi ...

  5. CodeForces - 93B(贪心+vector<pair<int,double> >+double 的精度操作

    题目链接:http://codeforces.com/problemset/problem/93/B B. End of Exams time limit per test 1 second memo ...

  6. C - Ordering Pizza CodeForces - 867C 贪心 经典

    C - Ordering Pizza CodeForces - 867C C - Ordering Pizza 这个是最难的,一个贪心,很经典,但是我不会,早训结束看了题解才知道怎么贪心的. 这个是先 ...

  7. Codeforces 570C 贪心

    题目:http://codeforces.com/contest/570/problem/C 题意:给你一个字符串,由‘.’和小写字母组成.把两个相邻的‘.’替换成一个‘.’,算一次变换.现在给你一些 ...

  8. Codeforces 721D [贪心]

    /* 不要低头,不要放弃,不要气馁,不要慌张. 题意: 给一列数a,可以进行k次操作,每次操作可以选取任意一个数加x或者减x,x是固定的数.求如何才能使得这个数列所有数乘积最小. 思路: 贪心...讨 ...

  9. CodeForces - 424B (贪心算法)

    Megacity Time Limit: 2000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit Sta ...

随机推荐

  1. SQL Server 2012提供的OFFSET/FETCH NEXT与Row_Number()对比测试 [T]

    SQL Server 2008中SQL应用系列--目录索引 前些天看到一篇文章<SQL Server 2012 - Server side paging demo using OFFSET/FE ...

  2. .net中的序列化

    常见的序列化格式和方法 在.net中,常见的序列化格式主要有json,二进制和xml,总结如下表格. 注意事项 关于实体特性标注规则: 1,.net中所有用于序列化的实体的class上应该加上[Ser ...

  3. php_html转译符号

    1.双引号 /" 或者 " 2.单引号 ' > 4. & &

  4. MYSQL低权限读文件

    技巧:Reading files in MySQL with file_priv = no. 当用户无权限调用load_file()函数的时候可以用以下方式读取文件内容: 1.建立test(不分配fi ...

  5. 简易线程池Thread Pool

    1. 基本思路 写了个简易的线程池,基本的思路是: 有1个调度线程,负责维护WorkItem队列.管理线程(是否要增加工作线程).调度(把工作项赋给工作线程)等 线程数量随WorkItem的量动态调整 ...

  6. 【67测试20161116】【数论】【DP】【思维】

    第一题: LGTB 得到了一个序列,他想在这个序列中选择一个最长的连续子序列,使得这个子序列的最大公约数等于1.请告诉他他能得到的最大长度,如果没有这样的序列,输出-1. 对于50% 的数据,1 &l ...

  7. onethinkp导入excel

    /** * Excel导入函数 * @author crx349 */ if (!empty($_FILES)) { $config = array( 'maxSize' => 3145728, ...

  8. js数组去重的方法

    //数组去重 Array.prototype.unique = function() { var newArr = [], hash = {}; for(var i=0, len=this.lengt ...

  9. 【初级】linux mkdir 命令详解及使用方法实战

    mkdir命令详解及使用方法实战 名称 MKDIR 是 make directories 的缩写 使用方法 mkdir [选项(如-p)] ...目录名称(及子目录注意用分隔符隔开)...    如使 ...

  10. 例子:Background Transfer Service Sample

    本例演示了如何使用后台传输服务来进行后台文件下载,也就是说及时App已经停止运行,同样可以通过后台代理进行文件的下载操作. 对于后台文件传输一下知识点必须注意: 1. 通过使用 BackgroundT ...