CF1067C Knights 构造
题目链接:https://codeforc.es/contest/1067/problem/C
题意:有一个无限大的棋盘,棋盘上初始放置了\(n\)个国际象棋马。如果某一个格子没有放马且能够被\(4\)个及以上的马经一步走到,那么这个格子也会放一个马。(如下图,初始的7个马为绿色,然后我们发现可以在红色区域再放一个马,在红色区域放置后,蓝色区域也应该再放一个马,总共9个)构造一种初始\(n\)个马的放置方案,使得棋盘上最终马的数量大于\(\lfloor\frac{n^2}{10} \rfloor\)。

分析:一道相当有趣的构造。构造的关键在于我们如何去考虑这个\(\lfloor \frac{n^2}{10} \rfloor\)。首先先考虑一个国际象棋马能到达那些位置。如下图。

显然我们至少在黄色块中选择4个才能在绿色区域中放置一个马。于是我们应尽可能让这些红色区域连续出现,于是出现了一个最简单的构造,如下。

我们把这n个马均匀地分成两行放置(绿色区域)。那么问题来了,这种状态究竟能生成多少个马。观察上图,我们发现这个构造生成的马数呈等差数列关系。原先每行有\(\frac{n}{2}\)个马,而第一次生成马新增了\(2\cdot (\frac{n}{2} - 4)\)个马,第二次则是\(2\cdot (\frac{n}{2} - 8)\),……
因此生成的总数为\(2\sum (\frac{n}{2} - 4i) = 2\cdot \frac{\frac{n}{2}(\frac{n}{2}\cdot \frac{1}{4})}{2} = \frac{n^2}{16}\)。因此这种构造的生成数不够,但是这个构造足以给我们启发,像这类向两侧生成的构造能够产生\(c\cdot n^2\)数量的马。于是我们考虑每一行最少几个马最终生成的数量才能多于\(\lfloor \frac{n^2}{10} \rfloor\)。
解不等式:\(2\sum (an- 4i)\leq \frac{n^2}{10}\)。
得到\(a\geq \frac{\sqrt{10}}{5}\)。于是我们需要构造一种新的方案使得每一行的马数能超过\(\frac{\sqrt{10}}{5}\)。如果对数字敏感一些则可发现\(\frac{2}{3}\geq \frac{\sqrt{10}}{5}\),因此我们的目标就是构造出一种每行至少存在\(\frac{2n}{3}\)个马的方案。

于是我们看到了上图这种构造。每一行的马数量大约为\(\frac{n}{3}\)。虽然数量不够但我们马上可以发现这张图的很多地方都能放上一些马,如下。

每一行的个数上升到了\(\frac{2n}{3}-4\)。在忽略常数和一次项的影响后,总马数约为\(\frac{n^2}{8}\)。
AC代码:
#include<bits/stdc++.h>
#define rep(i, a, b) for(int i = a; i <= b; ++i)
using namespace std;
typedef long long ll;
void io() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
}
ll n;
int main() {
io(); cin >> n;
rep(i, 1, n) cout << 2 * i / 3 << ' ' << 2 * i % 3 << endl;
}
CF1067C Knights 构造的更多相关文章
- Educational Codeforces Round 73 (Rated for Div. 2) B. Knights(构造)
链接: https://codeforces.com/contest/1221/problem/B 题意: You are given a chess board with n rows and n ...
- POJ2942 Knights of the Round Table[点双连通分量|二分图染色|补图]
Knights of the Round Table Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 12439 Acce ...
- Knights of the Round Table-POJ2942(双连通分量+交叉染色)
Knights of the Round Table Description Being a knight is a very attractive career: searching for the ...
- CF994B Knights of a Polygonal Table 第一道 贪心 set/multiset的用法
Knights of a Polygonal Table time limit per test 1 second memory limit per test 256 megabytes input ...
- POJ2942 UVA1364 Knights of the Round Table 圆桌骑士
POJ2942 洛谷UVA1364(博主没有翻墙uva实在是太慢了) 以骑士为结点建立无向图,两个骑士间存在边表示两个骑士可以相邻(用邻接矩阵存图,初始化全为1,读入一对憎恨关系就删去一条边即可),则 ...
- 学习笔记:Maven构造版本号的方法解决浏览器缓存问题
需要解决的问题 在做WEB系统开发时,为了提高性能会利用浏览器的缓存功能,其实即使不显式的申明缓存,现代的浏览器都会对静态文件(js.css.图片之类)缓存.但也正因为这个问题导致一个问题,就是资源的 ...
- 一步步构造自己的vue2.0+webpack环境
前面vue2.0和webpack都已经有接触了些(vue.js入门,webpack入门之简单例子跑起来),现在开始学习如何构造自己的vue2.0+webpack环境. 1.首先新建一个目录vue-wk ...
- About 静态代码块,普通代码块,同步代码块,构造代码块和构造函数的纳闷
构造函数用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数中的一种.特点:1:该函数的名称和所在类的名称相同.2:不需要定义返回值类型.3:该函数没有具体的返回值.记住:所有对象创 ...
- Eos开发——构造查询条件
1.ajax 方式 var data = { orgid :orgid,year:year ,month: month,type:type,sortField:'sellEmpname' ,sortO ...
随机推荐
- C语言sprintf函数的深入理解
由于sprintf跟printf在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出.这也导致sprintf比printf有用得多.所以本文着重介绍sprintf, ...
- IIS之虚拟目录
在站点物理路径下如果有多种文件夹,储存量较大主目录可能空间有限,因此必须放在其他分区上,而访问上述文件夹逻辑上还归属于网站,这种归属于网络之下的目录被称为虚拟目录. 右键添加虚拟目录 选择结束点击确定 ...
- msfconsole启动失败并报错`not_after=': bignum too big to convert into `long'的解决方法
1.启动msfconsole失败并报如下错误: /usr/share/metasploit-framework/lib/msf/core/payload/android.rb:86:in `not_a ...
- Python2安装MySQLdb
在http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python下载对应的包版本,如果是win7 64位2.7版本的python,就下载 MySQL_p ...
- WebViewJavascriptBridge(H5与原生交互)
https://github.com/wangjiaojiao77/WebViewJavascriptBridge(IOS)和 https://github.com/wangjiaojiao77/Js ...
- NEKO's Maze Game
NEKO#ΦωΦ has just got a new maze game on her PC! The game's main puzzle is a maze, in the forms of a ...
- C++-对象指针的滥用
C++ 中经常出现使用对象指针,而不是直接使用对象本身的代码,比如下面这个例子: Object *myObject = new Object; 而不是使用: myObject.testFunc(); ...
- tp5.1 Auth类实现权限管理
了解来这么久权限控制权限的知识,却不知道如何写代码,网上的代码多数并没有多少完整的源码能提供参考.偶然看到官网的例子,现在终于也把源码的实现也弄得明白了一点. tp5框架的Auth类可以实现页面的访问 ...
- vue里不同数据的循环,其中的数组对象
用产品的属性数据说明 页面里显示效果为:要把产品的属性显示到页面上,产品属性为后台自主上传产品的属性,产品的属性不同,所以需要把属性和属性值显示到页面上 产品属性数据为: properties: &q ...
- 通过django搭建一个简易的web页面(实现数据的查询、添加、修改、删除)
一.创建django项目 通过命令创建: django-admin startproject 项目名称 创建app应用 python3 manage.py startapp 应用名 #这里manage ...