当前位置: 首页 > news >正文

[COI2007] Sabor

下面给出这道一脸不可做的题的鬼畜性质:
1)对于一个点来说,其归属状态是确定的:走不到、A党或B党 。(黑白格染色)
方便起见,将包含所有不可达的点的极小矩形向外扩展一圈,设为矩形M。
2)矩形M的最外圈上相邻两点点到(0,0)的最短曼哈顿距离差值不超过1。
3)矩形M外任意正对于矩形M的点到垂直走向所正对的边必是到(0,0)的满足曼哈顿距离最小的路径的一条。
4)矩形M外任意非正对于矩形M到最靠近的M的一角必是到(0,0)的满足曼哈顿距离最小的路径的一条。

利用这些性质就可做了。。主要是向外扩展一圈这儿。。

然后就是找找规律的事儿了。。

#include <bits/stdc++.h>
#define P 1000
using namespace std;
const int fx[]={1,-1,0,0};
const int fy[]={0,0,1,-1};

int B,S;
long long cnt[2];
int dis[2005][2005];
int maxx,maxy,minx,miny;
queue<int> Qx,Qy;

inline void f1(int x,int y) {
    cnt[(x+y)&1]+=1LL*((S-dis[x][y])/2)*((S-dis[x][y])/2);
    cnt[(x+y+1)&1]+=1LL*((S-dis[x][y]-1)/2)*((S-dis[x][y]-1)/2+1);
} 
inline void f2(int x,int y) {
    cnt[(x+y)&1]+=(S-dis[x][y])/2;
    cnt[(x+y+1)&1]+=(S-dis[x][y]+1)/2;
}

int main() {
    scanf("%d%d",&B,&S);
    minx=miny=maxx=maxy=P;
    for(int x,y,i=1; i<=B; ++i) {
        scanf("%d%d",&x,&y);
        x+=P,y+=P;
        dis[x][y]=-1;
        minx=min(minx,x);
        maxx=max(maxx,x);
        miny=min(miny,y);
        maxy=max(maxy,y);
    }
    S++;
    minx--,miny--;
    maxx++,maxy++;
    Qx.push(P);
    Qy.push(P);
    dis[P][P]=1;
    while(!Qx.empty()) {
        int x=Qx.front(); Qx.pop();
        int y=Qy.front(); Qy.pop();
        if((x==minx||x==maxx) && (y==miny||y==maxy)) f1(x,y);
        if((x==minx||x==maxx)) f2(x,y);
        if((y==miny||y==maxy)) f2(x,y);
        cnt[(x+y)&1]++;
        if(dis[x][y]==S) continue;
        for(int nx,ny,k=0; k<4; ++k) {
            nx=x+fx[k];
            ny=y+fy[k];
            if(nx<minx||ny<miny||nx>maxx||ny>maxy||dis[nx][ny]) continue;           
            dis[nx][ny]=dis[x][y]+1;
            Qx.push(nx);
            Qy.push(ny);
        }
    }
    printf("%lld %lld\n",cnt[0],cnt[1]);
    return 0;
}   

转载于:https://www.cnblogs.com/nosta/p/10187323.html

相关文章:

  • docker容器中安装vi
  • 软件开发目录规范
  • 面向对象-特性property
  • 细数Windows 的那些小技巧!
  • linux自学(六)之开始centos学习,更换yum源
  • C#串口传输中文字符
  • 使用Elasticsearch-jdbc为MySQL数据库建立索引
  • 高性能JavaScript(数据存取)
  • 通过cmake在Android中调用c语言,且三方应用通过so库调用c语言
  • request设置属性 一般当做下一个页面的结果集
  • Niagara基于javascript的控件开发
  • SpringBoot之打成war包部署到Tomcat
  • 基本数据类型中的浮点类型
  • MyBaits 常见面试题
  • 洛谷p1072 gcd,质因数分解
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • Git学习与使用心得(1)—— 初始化
  • iOS 系统授权开发
  • mac修复ab及siege安装
  • opencv python Meanshift 和 Camshift
  • Python进阶细节
  • python学习笔记 - ThreadLocal
  • Redis的resp协议
  • supervisor 永不挂掉的进程 安装以及使用
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • windows下如何用phpstorm同步测试服务器
  • 阿里研究院入选中国企业智库系统影响力榜
  • 大整数乘法-表格法
  • 简单实现一个textarea自适应高度
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 爬虫模拟登陆 SegmentFault
  • 使用 Docker 部署 Spring Boot项目
  • 使用docker-compose进行多节点部署
  • 为什么要用IPython/Jupyter?
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 硬币翻转问题,区间操作
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 回归生活:清理微信公众号
  • # include “ “ 和 # include < >两者的区别
  • #mysql 8.0 踩坑日记
  • #每日一题合集#牛客JZ23-JZ33
  • (02)Hive SQL编译成MapReduce任务的过程
  • (1)(1.11) SiK Radio v2(一)
  • (12)Linux 常见的三种进程状态
  • (12)目标检测_SSD基于pytorch搭建代码
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • .net core 控制台应用程序读取配置文件app.config
  • .NET和.COM和.CN域名区别