#181. 「2019冬令营提高组」直径

(这题构造题是我考场上唯一一A的题........)

先看这个特殊的Subtask4

Subtask 4(20pts):$\sqrt{1+8k}$​​​ 为整数。

画了几张图,你轻松地发现这是菊花图。

大概就是这样↓

我们暂且设红点的个数为$k$表示菊花树的大小。

显然一棵菊花树的直径数为$k*(k-1)/2$

接下来我们试着以若干棵菊花图的形式构图。

当我们把两棵大小为(a,b)的菊花树连在一起时,

40pts到手

但是对于某些数(如一些大质数),两棵显然是不够的鸭

那么开三棵叭

ans=k1*(k2+k3)+k2*k3,于是我们可以枚举其中两棵子树,推出剩下一棵是否符合条件。

打个code发现3棵树满足的范围远远超过5000000,瞎搞搞就解决了

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int k,ans,tp,A,B,C,cnt; bool ok;
int main(){
freopen("diameter.in","r",stdin);
freopen("diameter.out","w",stdout);
scanf("%d",&k);
if(k==){printf("2\n1 2 1\n");return ;}
int sq=sqrt(*k+);
if(sq*sq==*k+){
for(int i=sqrt(*k);i*(i-)<=*k;++i)
if(i*(i-)==*k){ans=i+;break;}
printf("%d\n",ans);
for(int i=;i<=ans;++i) printf("1 %d 1\n",i);
return ;
}//subtask 4
if(k<=){
ans=k+;
printf("%d\n",ans);
printf("1 2 233\n");
for(int i=;i<=ans;++i) printf("1 %d 1\n",i);
return ;
}//subtask 1,2
for(A=;A<=;++A){
for(B=A;B<=;++B){
int qwq=k-A*B;
if(qwq<) continue;
if(qwq%(A+B)!=) continue;
C=qwq/(A+B);
if(C<) continue;
if(A+B+C+<=){ok=;break;}
}
if(ok)break;
}
ans=A+B+C+; cnt=;
printf("%d\n",ans);
for(int i=;i<=;++i) ++cnt,printf("1 %d 233\n",cnt);
for(int i=;i<=A;++i) ++cnt,printf("2 %d 1\n",cnt);
for(int i=;i<=B;++i) ++cnt,printf("3 %d 1\n",cnt);
for(int i=;i<=C;++i) ++cnt,printf("4 %d 1\n",cnt);
return ;
}

fjwc2019 D2T1 直径 (构造)的更多相关文章

  1. [AGC005C]Tree Restoring 构造

    Description ​ 给出一个数组a,要求构造一颗树,使节点x距离最远的点的距离为\(a_x\). Input ​ 第一行一个正整数NN(2≤N≤1002≤N≤100) ​ 接下来一行,有NN个 ...

  2. matlab练习程序(Ritter‘s最小包围圆)

    原始算法是sphere,我这里简化为circle了. Ritter's求最小包围圆为线性算法,因为非常简单,所以应用非常广泛. 该算法求出的圆比最优圆大概会大个5%到20%左右,求最优圆应该可以用Bo ...

  3. AtCoder - 2061 Tree Restoring

    Problem Statement Aoki loves numerical sequences and trees. One day, Takahashi gave him an integer s ...

  4. autocad 二次开发 最小包围圆算法

    autocad 二次开发 最小包围圆算法 主要实现了在模型空间下的得到一个包围所有图元的最小圆,该算法的思路是这样:1.从点集中随机选出两个点作为直径对圆进行初始化.2.判断下一个点p是否在圆中,如果 ...

  5. FJWC2019 直径

    题目描述 你需要构造一棵至少有两个顶点的树,树上的每条边有一个非负整数边权.树上两点 i,j 的距离dis(i,j) 定义为树上连接i 和j 这两点的简单路径上的边权和. 我们定义这棵树的直径为,所有 ...

  6. Codeforces 1082 D. Maximum Diameter Graph-树的直径-最长链-构造题 (Educational Codeforces Round 55 (Rated for Div. 2))

    D. Maximum Diameter Graph time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  7. uoj#283. 直径拆除鸡(构造)

    传送门 好神的构造题 vfk巨巨的题解 //minamoto #include<bits/stdc++.h> #define R register #define fp(i,a,b) fo ...

  8. Codeforces 1082D Maximum Diameter Graph (贪心构造)

    <题目链接> 题目大意:给你一些点的最大度数,让你构造一张图,使得该图的直径最长,输出对应直径以及所有的边. 解题分析:一道比较暴力的构造题,首先,我们贪心的想,要使图的直径最长,肯定是尽 ...

  9. Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) D. High Load 构造

    D. High Load 题目连接: http://codeforces.com/contest/828/problem/D Description Arkady needs your help ag ...

随机推荐

  1. 多级代理 haproxy 传递X-Forwarded-Proto

    有时候后端需要知道客户端是用的http请求还是https请求,所以一般在haproxy加上一个X-Forwarded-Proto头 http-request set-header X-Forwarde ...

  2. Ext.create细节分析

    var win1 = Ext.create('Ext.window.Window', { //实例化方法四 : 使用 完整的 Extjs 类名 width: 800, title: 'define t ...

  3. .NET拾忆:FileSystemWatcher 文件监控

    资源: https://msdn.microsoft.com/zh-cn/library/system.io.filesystemwatcher_properties(v=vs.110).aspx F ...

  4. 软件测试常用Linux命令

    有些技能可以事半功倍,有些命运掌握在我们手中.熟练的掌握和使用这些命令可以提高工作效率,并且结合这些命令对测试过程中遇到的问题进行一些初步的定位. 1 目录与文件操作 1.1 ls(初级) 使用权限: ...

  5. node.js初识01

    1.对于node.js的安装在这里就不做过多的介绍了,安装成功后,可以通过cmd 输入node -v查看node的版本号,如图所示 2.开始我们的hello world,通过cmd进入所属文件夹,输入 ...

  6. 如何使用js判断当前页面是pc还是移动端打开的

    1.利用了正则表达式和三目运算符,含义就是如果是移动端打开的话那就跳转到 "https:www.baidu.com/" ,如果不是就跳转到"http://new.baid ...

  7. mint-ui Picker的使用

    <template> <div v-bind:style="{minHeight:clientHeight + 'px'}" id="recive-mi ...

  8. MyBatis基础入门《三》Select查询集合

    MyBatis基础入门<三>Select查询集合 描述: 代码新增了一个MybatisUtil工具类,查询数据库返回集合的时候,接收数据的三种方式.由于代码会渐渐增多,未涉及改动过的文件不 ...

  9. Django配置xadmin后台模板之坑(一)

    环境: Python3.6 + Django2.0 + xadmin2.0 一.安装 1.首先安装就会有一个坑,很多教程的安装是直接在虚拟环境下使用 pip install xadmin 或者 pip ...

  10. c# mongo 数组里对象更新

    var queryDetail = new BsonDocument("cNo", doc.cNo);                     queryDetail.AddRan ...