模拟

很明显应该尽量选最大或最小的数。那么我们维护一个set,再维护一个mp,每次检查是否能选,如果选完这个数上面的东西不悬空就可以选,每次选完都要更新四周-2+2的方块,因为再远就影响不到了

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
const int N = , mod = ;
int m;
ll ans;
map<PII, int> mp;
PII mir[N];
set<int> s;
int x[N], y[N];
int down(int x, int y)
{
int ret = ;
if(mp.find(make_pair(x, y)) == mp.end()) return ;
for(int i = -; i <= ; ++i)
if(mp.find(make_pair(x + i, y - )) != mp.end()) ++ret;
return ret;
}
bool check(int i)
{
int x = mir[i].first, y = mir[i].second;
if(down(x - , y + ) > && down(x, y + ) > && down(x + , y + ) > ) return true;
return false;
}
void update(int p)
{
int x = mir[p].first, y = mir[p].second;
for(int i = -; i <= ; ++i)
for(int j = -; j <= ; ++j)
{
if(mp.find(make_pair(x + i, y + j)) == mp.end()) continue;
if(!check(mp[make_pair(x + i, y + j)])) s.erase(mp[make_pair(x + i, y + j)]);
else s.insert(mp[make_pair(x + i, y + j)]);
}
} int main()
{
scanf("%d", &m);
for(int i = ; i < m; ++i)
{
scanf("%d%d", &x[i], &y[i]);
mir[i] = make_pair(x[i], y[i]);
s.insert(i);
mp[make_pair(x[i], y[i])] = i;
}
for(int z = ; !s.empty(); z ^= )
{
set<int> :: iterator it;
while(true)
{
if(z == ) it = --s.end();
else it = s.begin();
if(check(*it)) break;
s.erase(it);
}
mp.erase(mir[*it]);
update(*it);
ans = (ans * m + *it) % mod;
s.erase(it);
}
printf("%lld\n", ans);
return ;
}

520D的更多相关文章

  1. How Xtuner E3 works for BMW 520d Diagnosis and initialization of CBS service

    Using Xtuner E3 to perform BMW 520d Diagnosis and initialization of CBS service in step by step proc ...

  2. utf-8 汉字对照表

    之前从redis中取出一些数据,utf8 16进制编码,想转成字符,没有找到现成的转化工具,先用这个表直接查找对照吧. UTF8编码表大全Code code# Code (coded in UTF-8 ...

  3. TMS 例子63 分组,子node

    procedure TForm1.InitGrid; begin advstringgrid1.Grouping.MergeHeader := true; //这个什么作用没有是 advstringg ...

  4. JS base64 加密和 后台 base64解密(防止中文乱码)

    直接上代码 1,js(2个文件,网上找的)  不要觉的长,直接复制下来就OK //UnicodeAnsi.js文件 //把Unicode转成Ansi和把Ansi转换成Unicode function ...

  5. 基于nodejs实现js后端化处理

    今天D哥给我提了个问题,"用php执行过js没"?咋一听,没戏~~毕竟常规情况下,js是依赖浏览器运行的.想在php后端采集的同时利用js运行结果并传递给php使用,没戏! 然后回 ...

  6. utf8汉字编码16进制对照

           utf8汉字编码16进制对照  GB    Unicode  UTF-8     Chinese Character Code  code# Code      (coded in UT ...

  7. Html5模拟通讯录人员排序(sen.js)

    // JavaScript Document var PY_Json_Str = ""; var PY_Str_1 = ""; var PY_Str_2 = & ...

  8. Base64 JAVA后台编码与JS前台解码(解决中文乱码问题)

    中文通过Java后台进行Base64编码后传到前台,通过JS进行Base64解码时会出现中文乱码的问题,被这个问题也是困扰了几天,使用jquery.base64.js只能转码非中文字符,经过搜集各种方 ...

  9. 将table导出为excel格式文件

    html: <table cellpadding="0" cellspacing="0" class="data_table" id= ...

随机推荐

  1. c++ 以二进制和以文本方式读写文件的区别

    在c++项目开发中,时常涉及到文件读写操作.因此在这里先简单梳理和回顾一下文本模式和二进制模式在进行文件读写上的区别. 1.linux平台下文本文件和二进制文件的读写 在linux平台下进行文件读写时 ...

  2. 顺序表查找及其优化(Java)

    顺序表查找(线性查找): private static void Ordersearch(int[] arr,int num) { for (int i = 0; i < arr.length; ...

  3. 初学JSP_内置对象

    out内置对象: 表单,表单常用的的提交方式

  4. Objective-C在ARC下结合GCD的单例模式和宏模版

    单例模式在iOS开发过程中经常用到,苹果提供过objective c单例的比较官方的写法: static MyGizmoClass *sharedGizmoManager = nil; + (MyGi ...

  5. C# 控件调整

    //最大化 this.WindowState = FormWindowState.Maximized; //去掉标题栏 this.FormBorderStyle = FormBorderStyle.N ...

  6. JS获取图片的原始宽度和高度

    页面中的img元素,想要获取它的原始尺寸,以宽度为例,可能首先想到的是元素的innerWidth属性,或者jQuery中的width()方法.如下: <img id="img" ...

  7. for循环中索引值和取值的迷惑

    利用for循环和range从100——10,倒序讲所有的偶数添加到一个新列表中,然后对列表的元素进行筛选,将能被4整除的数留下来. even = []for i in range(100,9,-1): ...

  8. Python变量的命名 单下划线和双下划线

    python命名变量的区别 foo: 一种约定,Python内部的名字,用来区别其他用户自定义的命名,以防冲突,就是例如__init__(),__del__(),__call__()这些特殊方法 _f ...

  9. HTML学习笔记之标签进阶

    目录 1.框架 2.表单 3.音频 4.视频 5.文档类型 6.头部元素 7.样式 8.脚本 9.实体 1.框架 使用框架允许我们在同一个浏览器窗口中显示多个页面,其中每份 HTML 文档称为一个框架 ...

  10. vue中对象属性改变视图不更新问题

    常规情况下我们在vue实例的data中设置响应数据.但当数据为对象,我们增加或删除对象属性值时,视图并不触发更新,如何解决这个问题呢? let vm = new Vue{ el: '#app', da ...