C - Cats Gym - 102875C

题目链接:https://codeforces.ml/gym/102875/problem/C

题意:每只猫的高度为1~20  两只同样高度的猫中间的最矮的猫不能比他们高

用1~20构造出这样的序列

思路  按  1 然后2个空位插2    1 2 1    4个空位插3 变为  3 1 3 2 3 1 3即可  最多构造2^20-1>1e5

直接用dfs 分区间搞即可   其实也是二叉树的中序遍历

C - Cats Gym - 102875C
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 #define pb push_back
 5 const int mod=1e4;
 6 const int maxn=1e6+10;
 7 int ans[maxn];
 8 
 9 
10 
11 void dfs(int l,int r,int x)
12 {
13     int mid=(l+r)/2;
14     ans[mid]=x;
15     if(l<=mid-1) dfs(l,mid-1,x+1);
16     if(r>mid) dfs(mid+1,r,x+1);
17 }
18 
19 int main()
20 {
21     ios::sync_with_stdio(0);
22     cin.tie(0);
23     int n;
24     cin>>n;
25     dfs(1,n,1);
26     for(int i=1;i<=n;i++)
27     {
28         if(i!=1)
29             cout<<" ";
30         cout<<ans[i];
31     }
32     cout<<'\n';
33 
34 
35 
36 
37 
38 
39 }
View Code

 

上一篇:基于Tensorflow和Keras实现猫狗分类


下一篇:Python在2020的新增功能:第1部分