[JZOJ6345]:ZYB建围墙(数学+构造)
题目描述
$ZYB$之国是特殊的六边形构造。

已知王国一共有$N$户家庭,每个家庭需占据一个不同的六边形格子。
王国里交流很频繁,所以这些家庭要构成一个连通区域;同时出于安全考虑,国王$ZYB$想在外面“围”一圈墙。
围墙需要遵守这样的规则:
$1.$墙也是建在格子上的。
$2.$墙不能建在任何一户家庭占据的格子上。
$3.$任何一户家庭都不可能走到围墙外面去。
$4.$围墙不一定要“贴”着家庭建,可以多围一些格子。
定义围墙的长度为它占据的格子的数量。
请你帮国王$ZYB$安排每户家庭的具体位置以及围墙的建造方案,使得围墙的长度最短。
输入格式
从文件$wall.in$中读入数据。
只读入一个数,表示家庭的数量$N$。
输出格式
输出到文件$wall.out$中。
输出一个数表示围墙的最小长度。
样例
样例输入1:
6
样例输出1:
12
样例输入2:
9
样例输出2:
14
数据范围与提示
前$20\%$:$N\leqslant 10$。
前$40\%$:$N\leqslant 20$。
前$70\%$:$N\leqslant 1,000$。
另有$10\%$:$N=6\times \frac{K(K+1)}{2}+1(K\in\mathbb{N})$
$100\%$:$1\leqslant N\leqslant 10^9$
题解
转化一下思想,先选择家庭的位置,然后再围轮廓。
显然家庭越集中越好。
先从另$10\%$的算法入手,只需要将其围成如下图这样即可$\downarrow$

答案显而易见,就是边长$-1$再乘$6$。
在来考虑一般情况,可以先围城这样,然后思考如何接着往里填。
首先,要知道下图中两种情况代价是一样的$\downarrow$


所以,遇到这种情况,不如直接将其填满。
接着考虑问题,也就是考虑先将$n$个家庭建成了正六边形后剩下的该怎么建。
假设多出来了一个,那么显然如下图中这么建更优$\downarrow$

这样多花的代价为$1$,而这样的点可以建原六边形边长$-1$个。
现在假设我们把这原六边形边长$-1$个位置填满了。

考虑接下来怎么填。
接着再扩一条边,扩的这条边显然与上一次扩的边相邻不劣,因为这样我们将获得原六边形边长个位置。

一直这么填就好了。
时间复杂度:$\Theta(\sqrt{N})$。
期望得分:$100$分。
实际得分:$100$分。
代码时刻
#include<bits/stdc++.h>
using namespace std;
int N;
int ans;
int main()
{
scanf("%d",&N);N--;
int now=0,fla=1;
for(int i=1;i<=N;i++)
{
if(now+(i-1)*6>N)
{fla=i-1;break;}
now+=(i-1)*6;
}
ans=6*fla;N-=now;
if(!N){printf("%lld",ans);return 0;}
ans++;N-=fla-1;
while(N>0){N-=fla;ans++;}
printf("%lld",ans);
return 0;
}
rp++
[JZOJ6345]:ZYB建围墙(数学+构造)的更多相关文章
- 【JZOJ6345】ZYB建围墙
description analysis 打表找规律,自认为样例给的提示很明显 容易想到最优方案是让家庭尽量先围成一个正六边形,剩下的在最外层绕一个圈 手推一波可以知道,如果正六边形有\(n\)层,剩 ...
- 【CodeForces】708 B. Recover the String 数学构造
[题目]B. Recover the String [题意]找到一个串s,满足其中子序列{0,0}{0,1}{1,0}{1,1}的数量分别满足给定的数a1~a4,或判断不存在.数字<=10^9, ...
- Codeforces 715A. Plus and Square Root[数学构造]
A. Plus and Square Root time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- 2.1Python数据处理篇之---内建有关数学的函数
目录 目录 前言 (一)数学相关得内建函数 (二)具体演示 1.求绝对值 2.创建一个复数 3.求商和余数 4.求x得y次幂 5.生成一个序列 6.四舍五入 7.对一个集合求和 8.求最大值 9.求最 ...
- Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined) D. Artsem and Saunders 数学 构造
D. Artsem and Saunders 题目连接: http://codeforces.com/contest/765/problem/D Description Artsem has a fr ...
- [数学-构造矩阵]NEFU 1113
依据题意.我已经推导出tn的公式.ti=ti.a+ti.b,ti.a=5*t(i-1).a+4*t(i-1).b,ti.b=t(i-1).a+t(i-1).b 然而以下居然不能继续推到sn的公式!!! ...
- UVA12716 GCD XOR 数论数学构造
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u010682557/article/details/36204645 题目给你一个N,让你求 两个数 ...
- [jzoj 6080] [GDOI2019模拟2019.3.23] IOer 解题报告 (数学构造)
题目链接: https://jzoj.net/senior/#main/show/6080 题目: 题意: 给定$n,m,u,v$ 设$t_i=ui+v$ 求$\sum_{k_1+k_2+...+k_ ...
- js17---创建对象:构造函数式和原型组合模式、动态原型模式、稳妥构造函数式
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
随机推荐
- Go入门所踩过的坑:cannot find package "" in any of
问题:cannot find package "" in any of.现已按照博客解决,分享一种自己踩得坑欢迎大神指导交流! 首先使用go env查看当前环境变量,新手入门出现找 ...
- List和Dictionary互转
// 声明Dictionary并初始化 Dictionary<string, string> dic = new Dictionary<string, string>() { ...
- git 公钥的使用
码云 https://gitee.com/ ,之前在教程视频中看到使用 码云 今天自己也撸了一把.第一次使用.打开官方网站看到免费开通企业版,就点了这个原本以为需要填写很多资料,实际操作下来,就一个 ...
- 基于MFC对话框的2048游戏
在之前一篇<简单数字拼板游戏学习>基础上修改,地址:http://www.cnblogs.com/fwst/p/3706483.html 开发环境:Windows 7/ Visual St ...
- 2.JVM、JRE、JDK之间的关系
诠释一. JDK(java development kit) JDK是Java开发工具包,是整个Java的核心,包括了Java运行环境JRE.Java工具和Java基础类库. JRE(java run ...
- AJAX中所谓的异步
async javascript and xml 异步的js和xml 在AJAX中的异步不是我们所理解的同步异步编程,而泛指“局部刷新”,但是我们以后的AJAX请求尽可能异步请求数据(因为异步数据获取 ...
- docker 第五篇 存储
镜像概述复习 Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层 如果运行中的容器修改了现有的一个已经存在的文件,那改文件将会从读写层下面的只读 ...
- django inclusion用法
概述: inclusion主要的是生成html标签, 返回的是一个字典,大分部跟simple_tag类似, simple_tag可返回任意类型的值 定义inclusion from django im ...
- wpf win10 popup位置偏移问题
同样问题参照: https://stackoverflow.com/questions/18113597/wpf-handedness-with-popups 解决方案: private static ...
- weblogic 反序列化漏洞 getshell
上传cmd.jsp,效果: 上传马: