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

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

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

  • 导出子图不强联通当且仅当存在一个点在导出子图中出度或入度为 \(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. Java Web程序设计笔记 • 【第4章 JavaBean和JSP标准动作】

    全部章节   >>>> 本章目录 4.1 JavaBean 4.1.1 JavaBean 概述 4.1.2 JavaBean的重要性 4.1.3 JavaBean的特点 4.1 ...

  2. Java初学者作业——实现控制台的猜数字游戏。游戏运行时产生一个1~100之间的随机数字

    返回本章节 返回作业目录 需求说明: (1)实现控制台的猜数字游戏.游戏运行时产生一个1-100之间的随机数字 (2)要求用户从控制台输入数字,若输入的数字比随机数小,则输出"太小了,再大一 ...

  3. 关于linux的一点好奇心(一):linux启动过程

    一直很好奇,操作系统是如何工作的?我们知道平时编程,是如何让代码跑起来的,但那些都是比较高层次的东西.越往后,你会越觉得,像是空中楼阁,或者说只是有人帮你铺平了许多道理,而你却对此一无所知. 1. 操 ...

  4. Kubernetes 部署 Kubernetes-Dashboard v2.0.0 尝鲜

    目录· . 一.简介· . 二.兼容性· . 三.部署 Kubernetes Dashboard· . 1.Dashboard RBAC· . 2.创建 ConfigMap.Secret· . 3.k ...

  5. [Docker] 制作并运行 Nginx 镜像

    环境 操作系统(cat /etc/redhat-release):CentOS Linux release 7.6.1810 (Core) Docker:18.09.6 文件 Dockerfile F ...

  6. 详谈 Java工厂 ---工厂方法模式

    1.前言 有个场景,消费者需要付钱,有可能是使用支付宝.微信.银行卡,那么该怎么选择呢? 是不是想到了使用用if else判断?还是使用switch? 一个地方这样写还好,如果有很多这样的业务,难道都 ...

  7. Linux上天之路(十八)之自动化部署

    pexpect Pexpect 是 Don Libes 的 Expect 语言的一个 Python 实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Pyth ...

  8. 论文翻译:2020_Nonlinear Residual Echo Suppression using a Recurrent Neural Network

    论文地址:https://indico2.conference4me.psnc.pl/event/35/contributions/3367/attachments/779/817/Thu-1-10- ...

  9. Java的JDBC

    第一个JDBC程序 创建测试数据库 CREATE DATABASE jdbcStudy CHARACTER SET utf8 COLLATE utf8_general_ci; USE jdbcStud ...

  10. Android官方文档翻译 十七 4.1Starting an Activity

    Starting an Activity 开启一个Activity This lesson teaches you to 这节课教给你 Understand the Lifecycle Callbac ...