zoukankan      html  css  js  c++  java
  • 【思维】牛客练习赛16 B-漂亮的树

    链接:https://www.nowcoder.com/acm/contest/84/B

    看到这道题目完全没有任何思路,从来没见到过这种题

    看着别人一个个的AC  自己心里还挺不是滋味的~

    看过别人博客的详解才明白

    代码:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 
     5 // 别人的思路 贴过来
     6 /*
     7 *思路:考虑三个序列:
     8 *1.输入的序列a
     9 *2.通过调整a最少次数得到正确的序列b
    10 *3.任意一个正确的辅助序列c
    11 */
    12 
    13 int arr[100005];   // 输入的序列a
    14 int f[100005];   // 辅助序列c
    15 // 开一个下标可以为负数的数组
    16 int data[200010] = {0};   // 分类并计数 
    17 int *cnt = data+100005;   // 很精妙 用指针实现下标可以为负数的数组
    18 int main()
    19 {
    20     int n,ans = 0;
    21     cin >> n;
    22     // 输入
    23     for(int i = 0;i < n;++i)    scanf("%d",&arr[i]);
    24     // 生成任意一个正确序列,保存在f中
    25     // 这里设置为{1,2,3,4,~~~,4,3,2,1};
    26     f[0] = f[n-1] = 1;
    27     for(int i = 1;i <= n-1-i;++i)    f[i] = f[n-i-1] = 1+i;
    28     // 根据差值来分类并计数
    29     for(int i = 0;i < n;++i)    cnt[f[i]-arr[i]]++;
    30     ans = n;
    31     for(int i = -100000;i <= 100000;++i)
    32     {
    33         if(ans > n-cnt[i])
    34             ans = n-cnt[i];
    35         // ans = min(ans,n-cnt[i]);
    36     }
    37     // 输出结果
    38     printf("%d
    ",ans);
    39     return 0;
    40 }

    虽然现在是看明白了 但是还是讲不出来
    自己实在是太菜了  

    文章搬运自我的个人博客http://duny31030.top 原博客为静态博客,因备份丢失无法继续更新,所以又搬运回博客园,可能部分文章阅读体验不好,可以到我的静态博客搜索相同标题查看
  • 相关阅读:
    1154 Vertex Coloring (25 分)
    7-4 Replacement Selection (30 分)
    7-3 Safari Park (25 分)
    7-2 The Judger (25 分)
    7-1 Prime Day (20 分)
    1101 Quick Sort (25 分)
    1093 Count PAT's (25 分)
    1128 N Queens Puzzle (20 分)
    N皇后问题
    1038 Recover the Smallest Number (30 分)
  • 原文地址:https://www.cnblogs.com/duny31030/p/8969417.html
Copyright © 2011-2022 走看看