/*
上帝说 要方
是的 很方
计数问题的容斥思想 (首先要注意 正方形有斜着的QAQ)
考虑我们要求的合法正方形 ans 根据容斥
ans = 无限制方案书 - 一个点确定的方案数 + 两个点确定的方案数 - 三个点确定的方案数 + 四个点确定的方案数 无限制方案数:
首先假设我们选择了一个n * n的正方形
那么这个正方形就包含了 n - 1种边界在正方形边上的正方形 根据这个来求出总方案数 一个点确定的方案数:(from huanghongxun's blog)
考虑每个被删除的点,其对上半,左半,右半,下半部分的影响类似,重复计算的就是正着的正方形的个数,即长宽的较小值。
用(l,r,h)(l,r,h)表示一个区域,删除的点在底边界上,左边有l个坐标,右边有r个坐标。
考虑(6+6)*6的区域。
倾斜0格的有6个,1格的有5个,2格的有4个,……,5格的有1个,6格的有6个,总的是27个。
如果是(6+6)*5的区域,那么就是5,4,3,2,1,5了。
如果是(2+2)*5的区域,那么就是2,2,2,2。
令z=min{l+r,h}z=min{l+r,h}
我们先假设高度要不大于左右侧,那么此时的答案就是z(z+3)/2。
如果大于了左右侧,那么考虑减去多计算的部分,如果左右侧补全到z,那么多出来的部分即n=z?l或z?rn=z?l或z?r,公式即为n(n+1) /2。
两个点确定的方案数:
三个点确定的方案数:
四个点确定的方案数:
这三个可以枚举两个已经确定的点, 然后算出剩下的两个点进行计算
确定三个的 除以3 确定四个的 除以6
愉快地解决
*/
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<set>
#include<iostream>
#define ll long long
#define M 5100
const int mod = ;
using namespace std;
struct P {
int x,y;
bool operator < (const P &b) const {
return x == b.x ? y < b.y: x < b.x;
}
} note[M],a,b;
int read() {
int nm = , f = ;
char c = getchar();
for(; !isdigit(c); c = getchar()) if(c == '-') f= -;
for(; isdigit(c); c = getchar()) nm = nm * + c - '';
return nm * f;
}
ll ans = , n, m, k, cnt3, cnt4;
set<P>st;
ll wk1(int l, int r, int h) {
int z = min(l + r, h);
if(z == ) return ;
ll zz = 1ll * z * (z + ) / ;
if(z > l) zz -= 1ll * (z - l) * (z - l + ) / ;
if(z > r) zz -= 1ll * (z - r) * (z - r + ) / ;
return zz;
} void solve1() {
for(int i = ; i <= k; i++) {
int x = note[i].x, y = note[i].y, l = x, r = n - x, u = y, d = m - y;
ans -= (wk1(l,r,u) + wk1(l,r,d) + wk1(u,d,l) + wk1(u,d,r) - min(l, u) - min(l, d) - min(r, u) - min(r, d));
ans %= mod;
}
} void wk2(P a, P b) {
if(a.x < || a.x > n || b.x < || b.x > n || a.y < || b.y < || a.y > m || b.y > m) return;
ans++;
int op = st.count(a) + st.count(b);
if(op == ) cnt3++;
if(op == ) cnt3 += , cnt4++;
} void solve234() {
for(int i = ; i <= k; i++) {
a = note[i];
for(int j = i + ; j <= k; j++) {
b = note[j];
int dx = a.x - b.x, dy = a.y - b.y, xx, yy;
/*两点相邻的*/
wk2((P){a.x + dy, a.y - dx}, (P){b.x + dy, b.y - dx});
wk2((P){a.x - dy, a.y + dx}, (P){b.x - dy, b.y + dx});
if((abs(dx) + abs(dy)) & ) continue;
/*对角线的*/
xx = dx - dy >> , yy = dx + dy >> ;
wk2((P){a.x - xx, a.y - yy}, (P){b.x + xx, b.y + yy});
}
}
} int main() {
n = read(), m = read(), k = read();
for(int i = ; i <= k; i++) {
note[i].x = read(), note[i].y = read();
st.insert(note[i]);
}
for(int i = ; i <= min(n, m); i++) ans += 1ll * i * (n - i + ) * (m - i + ), ans %= mod;
solve1();
solve234();
ans -= cnt3 / - cnt4 / ;
cout << ((ans % mod) + mod) % mod;
return ;
}

SHOI2016方的更多相关文章

  1. loj #2025. 「JLOI / SHOI2016」方

    #2025. 「JLOI / SHOI2016」方   题目描述 上帝说,不要圆,要方,于是便有了这道题. 由于我们应该方,而且最好能够尽量方,所以上帝派我们来找正方形.上帝把我们派到了一个有 NNN ...

  2. 【LOJ】 #2025. 「JLOI / SHOI2016」方

    题解 有什么LNOI啊,最后都是JLOI罢了 一道非常--懵逼的统计题 当然是容斥,所有的方案 - 至少有一个点坏掉的正方形 + 至少有两个点坏掉的正方形 - 至少有三个点坏掉的正方形 + 至少有四个 ...

  3. SHOI2016游记&滚粗记&酱油记

    Day0 学校刚期中考完,全科血崩,感觉这次真要考不到一本线了tat 晚上写了个可持久化trie的题,也懒得敲板子(上个礼拜都敲过了),就碎叫了 Day1 上午起床吃饭水群看球,吃完中饭就去考场了. ...

  4. 关于面试题 Array.indexof() 方法的实现及思考

    这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了. 昨天看到有网友说面试中也碰到过这个问题,我就重新思考了这个问题的实现方法. 对于想进大公 ...

  5. ASP.NET Core 中文文档 第二章 指南(4.10)检查自动生成的Detail方法和Delete方法

    原文 Examining the Details and Delete methods 作者 Rick Anderson 翻译 谢炀(Kiler) 校对 许登洋(Seay).姚阿勇(Mr.Yao) 打 ...

  6. 【手记】调用Process.EnterDebugMode引发异常:并非所有引用的特权或组都分配给呼叫方

    刚上线一个新版本,其中有台电脑打开软件就报[xx的类型初始值设定项引发异常](还好不是一大波电脑,新东西上线就怕哀鸿遍野),如图: 显然是该类型的静态构造函数中抛异常了(红线处就是类名),遂打开该类, ...

  7. 关于WCF报错之调用方未由服务器进行身份验证

    在我们部署好WCF服务以后,调用WCF服务会出现”调用方未由服务器进行身份验证”的错误.这个错误是怎么造成的呢? 通常我们在创建WCF后,用本机调试,一切正常,没有任何问题.其实用本机测试的时候,服务 ...

  8. Spark Rdd coalesce()方法和repartition()方法

    在Spark的Rdd中,Rdd是分区的. 有时候需要重新设置Rdd的分区数量,比如Rdd的分区中,Rdd分区比较多,但是每个Rdd的数据量比较小,需要设置一个比较合理的分区.或者需要把Rdd的分区数量 ...

  9. js方法入参或局部变量和全局变量重名,用来赋值全局变量会失败

    今天遇到个bug,最后终于知道原因了,js方法入参和全局变量重名,用入参赋值全局变量失败,就是说方法入参不能和全局变量重名. 现在下面的例子也说明,局部变量和全局变量不可以同名不光是入参,只要同名赋值 ...

随机推荐

  1. Fixed-point multiplication (C166 A*B/B)

    I want to multiply two fixed point numbers. After the multiplication I have to shift the result so t ...

  2. Maven install报MojoExecutionException

    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.2-beta-5:assembly (m ...

  3. Spring Cloud(Dalston.SR5)--Eureka 服务提供者

    要使微服务应用向注册中心发布自己,首先需要在 pom.xml 配置文件中增加对 spring-boot-starter-eureka 的依赖,然后在主类中增加 @EnableDiscoveryClie ...

  4. xcode Xcode_9.2.xip 官方离线下载地址

    一.打开下面的链接 https://developer.apple.com/downloads/ 二.在左侧搜索框中搜索:xcode 三.展开你要下载的版本,点列表右边的蓝色链接如:Xcode 9.2 ...

  5. hadoop 2.7.1安装和配置

    一.安装环境 硬件:虚拟机 操作系统:Centos 6.4 64位 IP:192.168.241.128主机名:admin安装用户:root 二.安装JDK 安装JDK1.7或者以上版本.这里安装jd ...

  6. 根据时间段获取时间段内所有时间点(js)

    Date.prototype.format=function (){var s='';s+=this.getFullYear()+'-';// 获取年份.s+=(this.getMonth()+1)+ ...

  7. py2exe 打包的两种方式

    cmd模式 #!/usr/bin/python #-*- coding: UTF-8 -*- from distutils.core import setup import py2exe setup( ...

  8. 在Outlook客户端使用SSL加密,弹出安全证书警告的解决方法。

    这是使用自己的域名.第三方的邮件系统是产生的问题. 如万网的邮箱系统,但在Outlook中,设置的pop3/imap/smtp的域名是你自己的域名. imap.youname.domain pop3. ...

  9. vi快捷键使用大全

    光标控制命令 命令 光标移动 h或^h 向左移一个字符 j或^j或^n 向下移一行 k或^p 向上移一行 l或空格 向右移一个字符 G 移到文件的最后一行 nG 移到文件的第n行 w 移到下一个字的开 ...

  10. LaTex与数学公式

    w(t) \longrightarrow \bigg[\frac{\sqrt{2\sigma ^2\beta}}{s+\beta}\bigg]  \longrightarrow \bigg[\frac ...