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 ...
随机推荐
- JUC-LOCK接口
Synchronized 1.多线程编程模版上 (1)线程 操作 资源类 (2)高内聚低耦合 2.实现步骤 (1)创建资源类 (2)资源类里创建同步方法,同步代码块 3.例子:卖票 LOCK 接口 锁 ...
- Ehcache缓存框架与 Shiro 框架 出现出现验证错误 && Tomcat 缓存清除的问题
当一个项目使用久了以后就会出现各种问题,下面是我遇到的一个权限验证错误的问题 我的项目是 Ehcache 结合 Shiro 一起使用的,项目用用久了出现 Token验证错误,Cookie之类 ...
- 生成器和迭代器_python
一.生成器简介(generator) 在进行较大数据的存储,如果直接存储在列表之中,则会可能造成内存的不够与速度的减慢,因为列表创建完是立即创建并存在的,而在python中生成器(generator) ...
- 题解【洛谷P2003】平板
题面 由于本题中\(n\)很小,\(\Theta(n^2)\)的暴力也可以通过. 具体可参照洛谷题解区 #include <bits/stdc++.h> #define itn int # ...
- 注释web.xml
注释掉红框里的内容
- MyBatis-单表的增删改查(CRUD)操作
在学习MyBatis的单表的增删改查操作之前,还是再次熟悉下MyBatis这个框架,只有对其熟悉的情况下,才能很好的使用,灵活的开发. MyBatis优点: ...
- python 百万级别类实例实现节省内存
# 案例: ''' 某网络游戏中,定义了玩家类Player(id,name,status) 每当有一个玩家,就会在服务器创建一个Player实例 当在线人数过多时,将产生大量实例(百万级别),消耗内存 ...
- Android Studio的第一次运行
一.开发软件的下载 下载教程 https://blog.csdn.net/bzlj2912009596/article/details/87280191 下载地址 http://www.android ...
- springboot13(redis缓存)
redis做springboot2.x的缓存 1.首先是引入依赖 <dependency> <groupId>org.springframework.boot</grou ...
- 麦子html基础
一.基础语法 1.基本结构