zoukankan      html  css  js  c++  java
  • CodeForces 658C Bear and Forgotten Tree 3 (构造)

    题意:构造出一个 n 个结点,直径为 m,高度为 h 的树。

    析:先构造高度,然后再构造直径,都全了,多余的边放到叶子上,注意直径为1的情况。

    代码如下:

    #pragma comment(linker, "/STACK:1024000000,1024000000")
    #include <cstdio>
    #include <string>
    #include <cstdlib>
    #include <cmath>
    #include <iostream>
    #include <cstring>
    #include <set>
    #include <queue>
    #include <algorithm>
    #include <vector>
    #include <map>
    #include <cctype>
    #include <cmath>
    #include <stack>
    #include <sstream>
    #define debug() puts("++++");
    #define gcd(a, b) __gcd(a, b)
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define freopenr freopen("in.txt", "r", stdin)
    #define freopenw freopen("out.txt", "w", stdout)
    using namespace std;
    
    typedef long long LL;
    typedef unsigned long long ULL;
    typedef pair<int, int> P;
    const int INF = 0x3f3f3f3f;
    const LL LNF = 1e16;
    const double inf = 0x3f3f3f3f3f3f;
    const double PI = acos(-1.0);
    const double eps = 1e-8;
    const int maxn = 100 + 10;
    const int mod = 1000000007;
    const int dr[] = {-1, 0, 1, 0};
    const int dc[] = {0, 1, 0, -1};
    const char *de[] = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
    int n, m;
    const int mon[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    const int monn[] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    inline bool is_in(int r, int c){
      return r >= 0 && r < n && c >= 0 && c < m;
    }
    
    vector<P> ans;
    
    int main(){
      int h;
      scanf("%d %d %d", &n, &m, &h);
      bool ok = true;
      int cnt = 1, last = 0;
      for(int i = 0; i < h; ++i){
        last = cnt;
        ans.push_back(P(cnt, cnt+1));
        ++cnt;
        if(cnt > n)  ok = false;
      }
      int idx = 0;
      if(m > h){  ans.push_back(P(1, cnt+1));  ++cnt; ++idx;  }
      if(cnt > n) ok = false;
      for(int i = 1; i < m-h; ++i){
        ans.push_back(P(cnt, cnt+1));
        ++cnt;
        ++idx;
        if(cnt > n)  ok = false;
      }
      while(cnt < n && m > 1)  ans.push_back(P(last, cnt+1)), ++cnt;
      if(idx > h || cnt != n) ok = false;
      if(!ok){ printf("-1
    ");  return 0; }
      for(int i = 0; i < ans.size(); ++i)
        printf("%d %d
    ", ans[i].first, ans[i].second);
      return 0;
    }
    

      

  • 相关阅读:
    1058 A+B in Hogwarts (20)
    1036. Boys vs Girls (25)
    1035 Password (20)
    1027 Colors in Mars (20)
    1009. Product of Polynomials (25)
    1006. Sign In and Sign Out
    1005 Spell It Right (20)
    1046 Shortest Distance (20)
    ViewPager页面滑动,滑动到最后一页,再往后滑动则执行一个事件
    IIS7.0上传文件限制的解决方法
  • 原文地址:https://www.cnblogs.com/dwtfukgv/p/7124165.html
Copyright © 2011-2022 走看看