ZYB建围墙 题解
ZYB建围墙
题意
给你一个数
思路
首先,我们尝试把图画出来枚举前面来找出规律。下面这张图里是 1~10 的距离。
好的,我们可以发现。在这个图中 7 这个图内部是六边形。外面一圈绿色的也是六边形。这个时候我们发现数据中有一部分是这么写的:
于是,我们考虑从这里入手。首先我们再次进行枚举可知,当
在这个基础上,我们考虑进行扩展。当现在是一个六边形的时候。设现在的边长为
AC code
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
namespace WYL{
const int INF=1e9;
const int N=1e3+10;
int n,opt=0;
int now=1,y=1,sy,x=6;
int f[N]={0,6,8,9,10,11,12,12,13,14,14,15,15,16,16,17,17,18,18,18,19};
bool check(int k){
for(int i=1;i*i<=INF;i++){
if(n==6*(i*(i+1)/2)+1){
opt=i;
return true;
}
}
return false;
}
signed main(){
cin>>n;
if(check(n)){
cout<<6*(opt+1)<<endl;
return 0;
}else{
while(now+x<=n){
now+=x;
y++;
x+=6;
}
sy=n-now;
// cout<<sy<<" "<<y<<endl;
if(sy==0){
// cout<<"***"<<endl;
cout<<x<<endl;
}else{
// cout<<x<<endl;
cout<<x+(sy/y)+1<<endl;
}
}
return 0;
}
}
signed main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
// freopen("wall.in","r",stdin);
// freopen("wall.out","w",stdout);
WYL::main();
return 0;
}
本文作者:Chillturtle
本文链接:https://www.cnblogs.com/OluMel/p/18473229
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步