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

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

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

  • 导出子图不强联通当且仅当存在一个点在导出子图中出度或入度为 \(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. Adaptive gradient descent without descent

    目录 概 主要内容 算法1 AdGD 定理1 ADGD-L 算法2 定理2 算法3 ADGD-accel 算法4 Adaptive SGD 定理4 代码 Malitsky Y, Mishchenko ...

  2. 木棒poj1011

    题目描述 乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过50个长度单位. 然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度. 请你设计一个程 ...

  3. 怎样安装python的 模块、 包、 库方法总结

    pip install 模块,这种输入命令回车后 1.pip install six 回车,安装成功后显示sucess 2.pip install lxml 回车,显示正在下载中的,可将这个下载地址复 ...

  4. Appium服务器初始化参数(Capability)

    原文:https://blog.csdn.net/lilongsy/article/details/83010101 appium官方说明:https://appium.io/docs/cn/writ ...

  5. Flask_CSRF保护(十一)

    flask使用 flask-wtf 模块提供的 CSRFProtect对象开启CSRF防护,方法如下: 后端设置 from flask import Flask from flask_wtf.csrf ...

  6. java 代理模式 总结

    1.前言 最近舍友去面试遇到了关于java代理模式的问题. 我虽然知道怎么使用,但是没有做过正经的总结,因此有了这篇随笔,好好总结一下三大代理模式底层原理. 事实上,在开发项目的时候,基本用不上代理, ...

  7. 【爬虫】将 Scrapy 部署到 k8s

    一. 概述 因为学习了 docker 和 k8s ,不管什么项目都想使用容器化部署,一个最主要的原因是,使用容器化部署是真的方便.上一篇文章 [爬虫]从零开始使用 Scrapy 介绍了如何使用 scr ...

  8. x86架构应用如何向Arm架构低成本迁移

    曾几何时,无论是在服务器还是个人电脑,CPU芯片领域一直是 Intel 独占鳌头,旗下的 X86_64 架构被广泛采用.然而王权没有永恒,近年来 Arm64 架构异军突起,服务器端有华为鲲鹏920高性 ...

  9. redis的使用场景和优缺点

    使用场景和优缺点: 2 Redis用来做什么? 通常局限点来说,Redis也以消息队列的形式存在,作为内嵌的List存在,满足实时的高并发需求.而通常在一个电商类型的数据处理过程之中,有关商品,热销, ...

  10. 【Java常用类】两个Date类

    两个Date类 java.util.Date类 两个构造器的使用 构造器一:Date():创建一个对应当前时间的Date对象 构造器二:创建指定毫秒数的Date对象 两个方法的使用 toString( ...