zoukankan      html  css  js  c++  java
  • Codeforces Round #423 (Div. 2) D. High Load(构造题)

    题目链接:Codeforces Round #423 (Div. 2) D. High Load

    题意:

    给你一个数n和k,让你构造出一颗树,有k个叶子节点,使得这棵树的任意两个点的距离的最大值最小。

    题解:

    显然要使得这棵树的任意两个点的距离的最大值最小,每个点离树根越近越好。

    然后要求有k个叶子节点,所以我就任意选一个点为根,然后构成一棵m叉的树就行了。

    最大距离的最小值就是离根最远的和最近的加一加就行了。

     1 #include<cstdio>
     2 #define F(i,a,b) for(int i=a;i<=b;++i)
     3 
     4 const int N=2e5+7;
     5 int n,m,a[N];
     6     
     7 int main()
     8 {
     9     scanf("%d%d",&n,&m);
    10     int now=1;
    11     F(i,2,n)
    12     {
    13         if(i<=m+1)a[i]=1;
    14         else a[i]=i-m;
    15     }
    16     int ans;
    17     if((n-1)%m==0)ans=(n-1)/m*2;
    18     else if((n-1)%m==1)ans=((n-1)/m*2)+1;
    19     else ans=((n-1)/m*2)+2;
    20     printf("%d
    ",ans);
    21     F(i,2,n)printf("%d %d
    ",i,a[i]);
    22     return 0;
    23 }
    View Code
  • 相关阅读:
    VSCode C++ 主题
    Linux 软连接应用
    Python 调用 C 动态库
    Qt 打包程序
    Qt 样式修改
    libusb 批传输的使用方法
    Qt 数据库操作
    Qt 调用第三方库
    CS 调用 C 动态库
    Qt 串口操作
  • 原文地址:https://www.cnblogs.com/bin-gege/p/7183213.html
Copyright © 2011-2022 走看看