数组错误的来

我数组大小是3005, 就是n*2;
AC了

1 条评论

  • @ 2020-03-06 15:03:52
    //附上AC代码
    //男 男 男 男 女 男 女 男 女 女 女 女
    //1  2  3 4  5  6  7 8  9 10 11 12
    //可以发现女生位置为: i + wo; 其中1<= i <= n,为输入的次序,wo 为输入的值
    #include <iostream>             //迎春舞会之交谊舞
    #include <algorithm>
    #include <cstdlib>
    using namespace std;
    const int MaxN = 3005;
    
    int n;
    struct Stack {
        int data[MaxN];
        int Top;            
    };
    
    void Push(Stack* S, int x)          //入栈
    {
        if (S->Top < MaxN)
            S->data[++S->Top] = x;
    }
    
    int Pop(Stack* S)                   //出栈
    {
        if (S->Top >= 0)
            return S->data[S->Top--];
        else
            return -1;  //栈空
    }
    
    
    int main()
    {
        Stack* S = new Stack{ 0 };                      //申请空间, 并初始化
        //Stack* S = (Stack*)calloc(1, sizeof(Stack));  //C语言写法
        S->Top = -1;
        cin >> n;
        int k = 1;
        int wo;
        for (int i = 1; i <= n; i++)
        {
            cin >> wo;
            for (; k < i + wo; k++)     //wo + i就是当前输入的女生位置
                Push(S, k);             //栈存入的是男生位置, 如样例中: 1,2,3,4,6,8
            k++;
            if(i == 1)
                printf("%d", (1 + wo + i - Pop(S)) / 2);        //求距离: 注意一对舞伴算1个距离
            else
                printf(" %d", (1 + wo + i - Pop(S)) / 2);
        }
    
        delete S;
        system("pause");
        return 0;
    }
    
  • 1

信息

ID
1062
难度
4
分类
数据结构 | 点击显示
标签
递交数
3510
已通过
1400
通过率
40%
被复制
11
上传者