题解

有什么LNOI啊,最后都是JLOI罢了

一道非常……懵逼的统计题

当然是容斥,所有的方案 - 至少有一个点坏掉的正方形 + 至少有两个点坏掉的正方形 - 至少有三个点坏掉的正方形 + 至少有四个点坏掉的正方形

总共的方案就是

\(\sum_{i}^{min(n,m)}i \* (n - i + 1) \* (m - i + 1)\)

至少有一个点坏掉的怎么统计,我们考虑这个点在底边,左边有l个坐标右边有r个坐标,上面有h个坐标

设\(z = min(l + r,h)\)

如果高度大于左右两边,那么总共的是\(\frac{z(z + 1)}{2} + z\)

如果有超出的部分,即\(z > l\),或\(z > r\)设差值为n,则多出去的就是\(\frac{n(n + 1)}{2}\)

然后两两枚举点对,最后统计出来的3个点要除3,统计出来4个点的要除6

代码

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>
#include <map>
#define MAXN 100005
#define pii pair<int,int>
#define fi first
#define se second
//#define ivorysi
using namespace std;
typedef long long int64;
int N,M,K;
pii P[2005];
map<pii,bool> mmm;
const int MOD = 100000007;
int64 ans,cnt2,cnt3,cnt4;
void sub(int l,int r,int h) {
int z = min(l + r,h);
ans -= 1LL * z * (z + 3) / 2;
if(z > l) ans += 1LL * (z - l) * (z - l + 1) / 2;
if(z > r) ans += 1LL * (z - r) * (z - r + 1) / 2;
ans = (ans % MOD + MOD) % MOD;
}
bool in_range(int x,int l,int r) {
if(x >= l && x <= r) return 1;
return 0;
}
void check(pii A,pii B) {
if(!in_range(A.fi,0,N) || !in_range(A.se,0,M) || !in_range(B.fi,0,N) || !in_range(B.se,0,M)) return;
++cnt2;
int t = mmm.count(A) + mmm.count(B);
if(t >= 1) ++cnt3;
if(t >= 2) ++cnt4,++cnt3;
}
void Solve() {
scanf("%d%d%d",&N,&M,&K);
for(int i = 1 ; i <= K ; ++i) {
scanf("%d%d",&P[i].fi,&P[i].se);
mmm[P[i]] = 1;
} for(int i = 1 ; i <= min(N,M) ; ++i) {
ans += 1LL * i * (N - i + 1) % MOD * (M - i + 1) % MOD;
ans %= MOD;
}
for(int i = 1 ; i <= K ; ++i) {
sub(P[i].fi,N - P[i].fi,P[i].se);
sub(P[i].fi,N - P[i].fi,M - P[i].se);
sub(P[i].se,M - P[i].se,P[i].fi);
sub(P[i].se,M - P[i].se,N - P[i].fi);
ans += min(P[i].fi,P[i].se);
ans += min(P[i].fi,M - P[i].se);
ans += min(N - P[i].fi,P[i].se);
ans += min(N - P[i].fi,M - P[i].se);
ans %= MOD;
}
for(int i = 1 ; i <= K ; ++i) {
for(int j = i + 1 ; j <= K ; ++j) {
int dx = P[i].fi - P[j].fi,dy = P[i].se - P[j].se;
check(make_pair(P[i].fi - dy,P[i].se + dx),make_pair(P[j].fi - dy,P[j].se + dx));
check(make_pair(P[i].fi + dy,P[i].se - dx),make_pair(P[j].fi + dy,P[j].se - dx));
if(abs(dx) + abs(dy) & 1) continue;
int x = (dx - dy) >> 1,y = (dx + dy) >> 1;
check(make_pair(P[i].fi - x,P[i].se - y),make_pair(P[j].fi + x,P[j].se + y));
}
}
ans += cnt2 - cnt3 / 3 + cnt4 / 6;
ans = (ans % MOD + MOD) % MOD;
printf("%lld\n",ans);
}
int main() {
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
}

【LOJ】 #2025. 「JLOI / SHOI2016」方的更多相关文章

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

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

  2. loj #2024. 「JLOI / SHOI2016」侦查守卫

    #2024. 「JLOI / SHOI2016」侦查守卫   题目描述 小 R 和 B 神正在玩一款游戏.这款游戏的地图由 nnn 个点和 n−1n - 1n−1 条无向边组成,每条无向边连接两个点, ...

  3. loj #2026. 「JLOI / SHOI2016」成绩比较

    #2026. 「JLOI / SHOI2016」成绩比较   题目描述 THU 的 G 系中有许许多多的大牛,比如小 R 的室友 B 神.B 神已经厌倦了与其他的同学比较 GPA(Grade Poin ...

  4. LOJ #2026「JLOI / SHOI2016」成绩比较

    很好的锻炼推柿子能力的题目 LOJ #2026 题意 有$n$个人$ m$门学科,第$ i$门的分数为不大于$U_i$的一个正整数 定义A「打爆」B当且仅当A的每门学科的分数都不低于B的该门学科的分数 ...

  5. 【LOJ】#2026. 「JLOI / SHOI2016」成绩比较

    题解 用\(f[i][j]\)表示考虑了前i个排名有j个人被碾压 \(f[i][j] = f[i - 1][k] \* C[k][j] \* C[N - k - 1][N - r[i] - j] \* ...

  6. 【LOJ】#2024. 「JLOI / SHOI2016」侦查守卫

    题解 童年的回忆! 想当初,这是我考的第一次省选,我当时初二,我什么都不会,然后看着这个东西,是不是能用我一个月前才会的求lca,光这个lca我就调了一个多小时= =,然后整场五个小时,我觉得其他题不 ...

  7. loj2026 「JLOI / SHOI2016」成绩比较

    orz #include <iostream> #include <cstdio> using namespace std; typedef long long ll; int ...

  8. loj2024「JLOI / SHOI2016」侦查守卫

    too hard #include <iostream> #include <cstdio> using namespace std; int n, d, m, uu, vv, ...

  9. Loj #2495. 「AHOI / HNOI2018」转盘

    Loj #2495. 「AHOI / HNOI2018」转盘 题目描述 一次小 G 和小 H 原本准备去聚餐,但由于太麻烦了于是题面简化如下: 一个转盘上有摆成一圈的 \(n\) 个物品(编号 \(1 ...

随机推荐

  1. 2017 10.25 NOIP模拟赛

    期望得分:100+40+100=240 实际得分:50+40+20=110 T1 start取了min没有用,w(゚Д゚)w    O(≧口≦)O T3 代码3个bug :数组开小了,一个细节没注意, ...

  2. PHP基础知识之————匿名函数(Anonymous functions)

    匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数.最经常用作回调函数(callback)参数的值.当然,也有其它应用的情况. ...

  3. stl空间配置器简介

    1. 符合STL标准的空间配器接口 STL是c++中使用非常广泛的一个标准库,它包含各种有用的容器.而空间配置器作为STL各种容器的背后的核心,负责容器内部内存的分配和释放.不过空间配置器可以分配的也 ...

  4. Java并发编程原理与实战十:单例问题与线程安全性深入解析

    单例模式我想这个设计模式大家都很熟悉,如果不熟悉的可以看我写的设计模式系列然后再来看本文.单例模式通常可以分为:饿汉式和懒汉式,那么分别和线程安全是否有关呢? 一.饿汉式 先看代码: package ...

  5. WPF让人哭笑不得的BUG

    前几天遇到了一个让我哭笑不得的bug,我写的Wpf程序在Win7里可以运行,到XP.WindowsServer里运行点击某个控件之后闪退,不报任何错,在后台代码里trycatch也捕捉不到任何异常.很 ...

  6. 训练赛第二场C题 zoj 2339 Hyperhuffman

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2339 解题报告:题目太长了,比赛的时候根本看不懂,完了之后问了什 ...

  7. 【leetcode 简单】 第七十五题 第一个错误的版本

    你是产品经理,目前正在带领一个团队开发新的产品.不幸的是,你的产品的最新版本没有通过质量检测.由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的. 假设你有 n 个版本 [1, ...

  8. 工具推荐:ATSCAN,功能强大的Perl脚本扫描器

    工具推荐:ATSCAN,功能强大的Perl脚本扫描器 使用perl语言编写的开源的扫描器,功能丰富强大,除了基本的tcp和udp端口扫描之外,还可以搜索wordpress.joomla等网站并进行口令 ...

  9. Intent 对象在 Android 开发中的应用

    转自(http://www.ibm.com/developerworks/cn/opensource/os-cn-android-intent/) Android 是一个开放性移动开发平台,运行在该平 ...

  10. docker stack 部署 mysql 5.6

    =============================================== 2018/7/1_第1次修改                       ccb_warlock === ...