不难发现,直接漫无目的地构造不是一个好的选择,因为我们并不知道选择四座城市方案的上界是什么,因此下面可以来先分析一下这个方案的上界。

首先可以考虑这使得这四个点的导出子图是强连通的方案数,但是经过尝试可以发现,合法的情况非常之多,因此我们来考虑不合法的情况。

从简单的情况出发,当导出子图中不存在无向边时:

  • 导出子图不强联通当且仅当存在一个点在导出子图中出度或入度为 \(3\)。

这种情况下不强联通是显然的,下面来证明其他情况都是强连通的。

不难发现当这张图如果存在三个点强连通时,因为另一个点不可能全连出边或入边,因此这四个点必然四强联通。

接下来证明不存在不出现三个点强连通的情况:

首先随便选取一个点,找到它连向的点和连向它的点分别记作 \(A, B\),那么此时如果是 \(A \rightarrow B\) 则已经产生了三元环,所以只能从 \(B \rightarrow A\),此时 \(B\) 出度已经为 \(2\) 那么只能选择让另一个点连向 \(B\) ……

接下来通过这种必然性最终可以推出必然存在三个点强连通。

再来考虑存在无向图的情况:

  • 同理,存在一个点在导出子图中出度或入度(有向边)为 \(3\) 时一定不强连通。

  • 当只存在一条无向边时,也必然能形成三联通。

  • 当存在两条无向边且在端点处相交时,已经形成了三联通。

  • 当存在两条边且不在端点处相交时,不难发现也易证得当且仅当所有有向边都从一边指向另一边时不强连通。

  • 当存在三条或三条以上的无向边时,已经形成了三联通/四联通。

因此,最终可以归纳得唯一不合法的两种情况:

  1. 存在一个点连出去或被连入三条有向边。

  2. 存在两条无向边边且不在端点处相交时,所有有向边都从一边指向另一边。

可以发现的是,当点多以后第一种情况是避免不了的,因为总是存在一个点向外连出多条边。

那么可以来分析一下第一种情况方案数的下界,令每个点连出去的边数量为 \(A_i\)。

可知 \(\sum\limits_{i = 1} ^ n A_i = \frac{n(n - 1)}{2} - n = \frac{n(n - 3)}{2}\)

那么一个点连出去三条边的不合法方案应为:\(\sum\limits_{i = 1} ^ n \dbinom{A_i}{3}\)

因为 \(\dbinom{x}{3} = \frac{x(x - 1)(x - 2)}{3}\) 在 \([3, + \infty)\) 上是凸函数,因此可知:

\[\sum\limits_{i = 1} ^ n \dbinom{A_i}{3} \ge n \times \dbinom{\frac{n - 3}{2}}{3}
\]

等号成立当且仅当 \(A_i = \frac{n - 3}{2}\)。

接下去貌似没法继续求得第二种情况方案数的下界了,可以考虑返回原问题尝试着构造一番。

因为每个点的对称性,所以我们分配无向边的时候最简单的方法就是让每个点分配得度数一样:都分配两条无向边与其相连。

不难发现,只需要将这个点连向正多边形中距离其最远的两个点即可。

接下来,每个点恰好剩下了 \(\frac{n - 3}{2}\) 个入度。

那么此时可以发现,因为必然存在入度为 \(3\) 的点,所以不合法情况 \(1.2\) 会必然存在。

但是,我们可以让入度为 \(3\) 的点和出度为三的点尽可能出现在一起就可以减少不合法的情况。

也就是当三个点 \(A, B, C\) 连向同一个点 \(D\) 时,存在一个点不妨假设为 \(A\),满足 \(A \rightarrow B, A \rightarrow C\)。

通过尝试不难发现可以让每个点连向右边距离其 \(1 \sim \frac{n - 3}{2} - 1\) 的所有点,即可满足所有 \(1.1, 1.2\) 的不合法状态重合。

此时回过头来又可以发现,对于任意一组不在端点相交的无向边都必然不会存在 \(2\) 的不合法情况。

因此,此时合法的方案数达到了上界 \(\dbinom{n}{4} - n \times \dbinom{\frac{n - 3}{2}}{3}\),复杂度 \(O(n ^ 2)\)。

#include <bits/stdc++.h>
using namespace std;
#define rep(i, l, r) for (int i = l; i <= r; ++i)
const int N = 1e2 + 5;
int n, ans, a[N][N];
int read() {
char c; int x = 0, f = 1;
c = getchar();
while (c > '9' || c < '0') { if(c == '-') f = -1; c = getchar();}
while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}
int Tr(int x, int d) { return (x + d) % n == 0 ? n : (x + d) % n;}
int main() {
n = read();
if(n >= 4) {
ans = n * (n - 1) * (n - 2) * (n - 3) / 24;
int k = (n - 3) / 2;
if(k >= 3) ans -= n * k * (k - 1) * (k - 2) / 6;
}
if(n == 1) puts("0"), puts("0");
else {
printf("%d\n", ans);
rep(i, 1, n) a[i][Tr(i, n / 2)] = a[i][Tr(i, n / 2 + 1)] = 1;
rep(i, 1, n) rep(j, 1, n / 2 - 1) a[i][Tr(i, j)] = 1;
rep(i, 1, n) {
rep(j, 1, n) printf("%d ", a[i][j]);
puts("");
}
}
return 0;
}

当需要构造某种方案达到极值时,往往先分析极值的界限在基于这个界限进行构造。

同时,在构造时一定要抱有目的,按需构造。

【XR-2】伤痕的更多相关文章

  1. XD, XR, DR 股票

    股权登记日与除权除息日 所以,如果投资者想得到一家上市公司的分红.配股权,就必须弄清这家公司的股权登记日在哪一天,否则就会失去分红.配股的机会. 股权登记日后的第一天就是除权日或除息日,这一天或以后购 ...

  2. iOS屏幕适配 支持新手机 iPhone XR iPhone XS 超简单

    随着苹果爸爸发布了 超牛叉的iPhone iPhone X .iPhone XR.iPhone XS .iPhone XS Max.开发者的适配工作要开始了. 停,

  3. js判断iPhone XS、iPhone XS Max、iPhone XR

    // iPhone X.iPhone XS && window.screen.width === && window.screen.height === ; // iP ...

  4. xr报表调整

    xr报表调整,此乃为软件应用层调整,非后端数据库调整. 主单付款方式为AR支票300元 应收账务AR支票预付款 3000元录入调整 -300 AR支票付款录入收入 300 现金付款核销掉,报表现金多出 ...

  5. IOS开发之--iPhone XR,iPhone XS Max适配

    因为iPhone X和iPhone XS的尺寸比是一样的,只需要把这两张图片补上就行. 具体原理性的东西就多说了,因为iPhoneX系列都一样,本文只说明一下具体怎么做,要适配屏幕,首先得让他以正确的 ...

  6. 在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作。一次移动操作指用一个"LX"替换一个"XL",或者用一个"XR"替换一个"RX"。现给定起始字符串start和结束字符串end,请编写代码,当且仅当存在一系列移动操作使得start可以转换成end时, 返回True。

    在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作.一次移动操作指用一个"LX"替换一个"XL ...

  7. css判断iphoneX、iphoneXs、iphoneXs Max、iphone XR

    //iphoneX.iphoneXs @media only screen and (device-width: 375px) and (device-height: 812px) and (-web ...

  8. 苹果XR手机的音频体验测试总结

    苹果XR手机的音频   苹果XR算是苹果手机历史上一个里程碑的型号了,是苹果憋了两年的大招,连苹果9的称号就不要了.直接是X.说明苹果对它给予的希望很大.作为一个音频算法工程师,一直想体验一下XR的音 ...

  9. 剖析虚幻渲染体系(15)- XR专题

    目录 15.1 本篇概述 15.1.1 本篇内容 15.1.2 XR概念 15.1.2.1 VR 15.1.2.2 AR 15.1.2.3 MR 15.1.2.4 XR 15.1.3 XR综述 15. ...

  10. iOS 获取蜂窝网络信号强度 包含iPhoneX XS XR XSMASX (最新)

    1.虽然各种直接获取信号强度的api都被封杀了.但是还有一个另类的黑魔法可以获取到.那就是遍历UIStatusBar了 网络上有的文章写的会崩溃 比如: - (int)getSignalStrengt ...

随机推荐

  1. VR AR MR的未来

    VR:VR(Virtual Reality,即虚拟现实,简称VR),是由美国VPL公司创建人拉尼尔(Jaron Lanier)在20世纪80年代初提出的.其具体内涵是:综合利用计算机图形系统和各种现实 ...

  2. DeepFool: a simple and accurate method to fool deep neural networks

    目录 概 主要内容 二分类模型 为线性 为一般二分类 多分类问题 仿射 为一般多分类 Moosavidezfooli S, Fawzi A, Frossard P, et al. DeepFool: ...

  3. Java练习习题,百钱买百鸡问题,用100文钱买鸡,公鸡5文钱一只,母鸡3文钱一只,小鸡3只1文钱

    需求说明: 用100文钱买鸡,公鸡5文钱一只,母鸡3文钱一只,小鸡3只1文钱,要求公鸡.母鸡.小鸡都必须要有,刚好用完100文钱,公鸡.母鸡.小鸡的数量之和也是100. public class te ...

  4. Oracle对表空间、用户、用户权限的操作

    一.对表空间的操作 1.创建表空间(create tablespace) -- 'hpdb_tablespace' 指定表空间名称 -- 'e:\hpdb.dbf' 指定表空间数据文件名称 -- si ...

  5. git中submodule子模块的添加、使用和删除

    git中submodule子模块的添加.使用和删除   原文链接:https://blog.csdn.net/guotianqing/article/details/82391665背景项目中经常使用 ...

  6. Pytest_配置文件-pytest.ini(4)

    pytest配置文件可以改变pytest的默认运行方式,它是一个固定的文件名称pytest.ini. 存放路径为项目的根目录 解决中文报错 在讲解配置文件的可用参数前,我们先解决一个高概率会遇到的问题 ...

  7. python 之 pip、pypdf2 安装与卸载

    pip是个啥? pip 是一个现代的,通用的 Python 包管理工具.提供了对 Python 包的查找.下载.安装.卸载的功能. 第一步:pip 下载:https://pypi.org/projec ...

  8. Vue-cli代理解决跨域问题

    使用vue-cli调接口的时候,总是会出现垮与问题,因为vue的localhost与访问域名不一致导致.而这一点,开发者显然也想到了,故而在vuejs-templates,也就是vue-cli的使用的 ...

  9. Linux上天之路(十六)之Shell编程一

    用户在命令行输入命令后,一般情况下Shell会fork并exec该命令,但是Shell的内建命令例外,执行内建命令相当于调用Shell进程中的一个函数,并不创建新的进程.以前学过的cd.alias.u ...

  10. Linux驱动实践:中断处理函数如何【发送信号】给应用层?

    作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++.嵌入式.Linux. 关注下方公众号,回复[书籍],获取 Linux.嵌入式领域经典书籍:回复[PDF],获取所有原创文章( PDF 格式). ...