#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. iOS UI基础-13.0 数据存储

    应用沙盒 每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒 应用沙盒的文件系统目录,如下图所示(假设应用的名称叫Lay ...

  2. cocos2d-x JS 开启远程代码调试

    为了方便服务端与测试部门的工作需要,把客户端的写的程序可以在其他电脑上运行,方便他人工作与测试. 下面是cocos2d-x JS WebStorm 的设置方法.

  3. VS VC 读取 INI文件

    1.获取应程序同极目录下的config.ini路劲 void GetConfigFilePath(char *path,int len, char *file) { char module[256] ...

  4. 监控Tomcat

    监控Tomcat 无论是使用Zabbix.还是jconsole等其他工具,当需要监控Tomcat时,需对Tomcat进行jmx配置.此处以Linux系统为例,配置Tomcat. 注意: 下文中出现的: ...

  5. Nodejs【单机】多进程模式集群

    Nodejs[单机]多进程模式集群实例: 1.安装:npm install -s cluster 2.服务代码: var debug = require('debug'); var express = ...

  6. c#Stream学习笔记

    C# 温故而知新:Stream篇(—) http://www.cnblogs.com/JimmyZheng/archive/2012/03/17/2402814.html 基本概念重点看这一篇. 什么 ...

  7. HttpServletRequestWrapper

    1). why 需要改变从 Servlet 容器 (可能是任何的 Servlet 容器)中传入的 HttpServletRequest 对象的某个行为,该怎么办? 一. 继承 HttpServletR ...

  8. ETL面试题集锦

    1. What is a logical data mapping and what does it mean to the ETL team? 什么是逻辑数据映射?它对ETL项目组的作用是什么? 答 ...

  9. tensorflow学习6

    g_w1 = tf.get_variable('g_w1', [z_dim, 3136], dtype=tf.float32, initializer=tf.truncated_normal_init ...

  10. 转:C#清除回收站

    SHEmptyRecycleBin是一个内核API方法,该方法能够清空回收站中的文件,该方法在C#中需要手动的引入方法所在的类库.该方法在C#中的声明语法如下: [DllImportAttrbute( ...