- 迎春舞会之交谊舞
- 2020-03-06 14:51:11 @
我数组大小是3005, 就是n*2;
AC了
1 条评论
-
Jong-oo LV 8 @ 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