题目链接

分析:

这是多校的一个题,当时没做出来。学长说让用multiset。

用multiset将每一个数的1<<dim个状态全部保存。假设状态 i, 最远曼哈顿距离应当是 max[i]-min[i], 但如果知道 i 的相反的状态就可以转化成 max[i]+min[(~i)&(1<<dim-1)]. 这和 x-y = x + (-y) 是一个道理.

AC代码如下:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <stack>
#include <set> using namespace std; const int maxn = +;
const int dem = ; //维数
const int INF = (<<); int dim, x[maxn][dem]; int main(){
int n, ord; while(scanf("%d %d", &n, &dim) == ) {
multiset<int> ms[];
multiset<int>::iterator it; for(int i=; i<=n; i++) {
scanf("%d", &ord);
if(ord == ) {
for(int j=; j<dim; j++) {
scanf("%d", &x[i][j]);
} for(int j=; j<(<<dim); j++) {
int t = j, s = ;
for(int k=; k<dim; k++) {
if(t & ) s += x[i][k];
else s -= x[i][k];
t >>= ;
}
ms[j].insert(s);
} } else { //ord == 1 scanf("%d", &ord);
for(int j=; j<<<dim; j++) {
int t = j, s = ;
for(int k=; k<dim; k++) {
if(t & ) s += x[ord][k];
else s -= x[ord][k];
t >>= ;
} it = ms[j].find(s);
ms[j].erase(it);
}
} int ans = ;
for(int j=; j<(<<dim); j++) {
int k = ((~j) & ((<<dim)-));
int t1, t2;
it = ms[j].end(); //multiset内部是升序排列
it--;
t1 = *it;
it = ms[k].end();
it--;
t2 = *it;
ans = max(ans, t2+t1);
} printf("%d\n", ans);
}
} return ;
}

最新文章

  1. JavaScript中style, currentStyle和 getComputedStyle的异同
  2. 进入meta模式关闭背光灯
  3. 轻松实现ajax登录时让浏览器保存密码
  4. php中的常用数组函数(一)(比较多个数组的差集的函数们 array_diff_assoc() array_diff() array_diff_key() array_diff_ukey() array_diff_uassoc())
  5. 【C#】3.算法温故而知新 - 快速排序
  6. xxxx
  7. fastJson泛型如何转换
  8. (转)Yale CAS + .net Client 实现 SSO(1)
  9. Xamarin.Forms-VS安装调试错误
  10. effective c++ 条款9 do not call virtual function in constructor or deconstructor
  11. 使用PHP实现文件上传和多文件上传
  12. 将Editplus添加到右键打开菜单
  13. Display 和Visible 区别
  14. node.js学习4--------------------- 根据不同路径来响应内容,以及中文乱码的解决
  15. 痞子衡嵌入式:恩智浦半导体全系无线(BLE, Zigbee, Thread, 2.4G, Sub-1G)微控制器芯片一览
  16. 配置SAP GUI FOR HTML(通过WEB方式登录)
  17. [原创]Javascript模拟“类”的综合实现方式以及部分细节【截至ES6】
  18. 【做题】arc068_e-Snuke Line——利用特殊性质分讨
  19. [PHP]防止表单重复提交的几种方法
  20. Eclipse 插件安装报错问题(已解决)

热门文章

  1. android scrollview组件禁止滑动的方法
  2. Error parsing XML: not well-formed (invalid token) 报错+R文件消失解决的方法
  3. const常量折叠
  4. Drawable与Bitmap(转)
  5. codevs 4909 寂寞的堆(写的好丑0.0)
  6. try{...} catch {...} finally{...} 各种情况代码的执行情况
  7. (转)iFrame高度自适应
  8. ASP.NET C#使用JavaScriptSerializer实现序列化与反序列化得到JSON
  9. Rechability的简单使用
  10. 64位操作系统下IIS报“试图加载格式不正确的程序”错误