题目描述 小核桃有一个空序列A,但是他不太喜欢这个序列,因此他想通过一些操作改变序列A,接下来小核桃将依次进行N次操作,其中第i次操作分为以下两步:

1.将数字i加到序列A的尾部。

2.反转序列(即A[1],a[2],a[3]...A[i]变为 A[i]...A[3],A[2],A[1])。

小核桃想知道N次操作之后,序列A会变为什么样子,你能帮助他吗?

输入格式 一个整数N。

输出格式 一行N个整数, 表示N次操作后的序列A。

样例 输入数据 1 4 输出数据 1 4 2 1 3 输入数据 2 5 输出数据 2 5 3 1 2 4 样例1解释 每次操作后序列如下:

1

2 1

3 1 2

4 2 1 3

数据范围 对于30%的测试数据,N≤20。

对于60%的测试数据, N≤1000。

对于100%的测试数据,N≤100000。

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    int n;
    cin >> n;
    
    vector<int> a;
    
    for (int i = 1; i <= n; ++i) {
        a.push_back(i);
        reverse(a.begin(), a.end());
    }
    
    for (int i = 0; i < n; ++i) {
        cout << a[i] << (i == n - 1 ? '\n' : ' ');
    }
    
    return 0;
}

60pts TLE

8 条评论

  • @ 2024-10-15 10:55:21

    核桃oj的题吗?为什么不在站内问

    • @ 2024-10-12 20:52:23
      #include<bits/stdc++.h>
      using namespace std;
      const int N=1e5+10;
      int n,a[N*2],head,tail;
      int main(){
      	//freopen("xx.in","r",stdin);
      	//freopen("xx.out","w",stdout);
      	ios::sync_with_stdio(0);
      	cin.tie(0);
      	cout.tie(0);
      	cin>>n;
      	head=n,tail=n-1;
      	for(int i=1;i<=n;i++){
      		if(i&1){
      			a[++tail]=i;
      		}else{
      			a[--head]=i;
      		}
      	}
      	for(int i=head;i<=tail;i++){
      		cout<<a[i]<<" ";
      	}
      	return 0;
      }
      
      • @ 2024-10-12 20:50:09

        最后,从head到tail输出就可以了

        • @ 2024-10-12 20:49:41

          数组开2n

          • @ 2024-10-12 20:49:20

            正解不是这样的,但这样应该是对的:

            一个数组,设head=n,tail=n-1,然后记录现在数组是正序还是倒序,如果是正序,那就在tail+1添加;否则,在head-1添加。

            • @ 2024-10-12 20:47:15

              还有,这明显是思路问题吧

              • @ 2024-10-12 20:46:48

                救救我!

                • @ 2024-10-12 20:45:55

                  去luogu问

                  • 1