题目
源地址:
http://poj.org/problem?id=1068
理解
模拟栈操作,主要是对题目意思的理解。
代码
#include<cstdio>
#include<iostream>
#include<stack>
using namespace std;
int a[25], b[25], c[100];
int main(int argc, char const *argv[])
{
int i, j, t, n, p, num;
stack<int> st;
scanf("%d", &t);
while (t--)
{
num = 0;
cin >> n;
a[0] = 0;
p = 0;
for (i = 1; i <= n; i++)
{
cin >> a[i];
for (j = p; j < p + a[i] - a[i - 1]; j++)
c[j] = j + 1;
c[p + a[i] - a[i - 1]] = -(p + a[i] - a[i - 1] + 1);
p = p + a[i] - a[i - 1] + 1;
}
j = 0;
for (i = 0; i < p; i++)
{
if (c[i] > 0)
st.push(c[i]);
else
{
num = st.top();
st.pop();
num = (-c[i] - num) / 2 + 1;
b[j] = num;
j++;
}
}
for (i = 0; i < j - 1; i++)
printf("%d ", b[i]);
printf("%d\n", b[j - 1]);
}
return 0;
}
更新日志
- 2014年07月22日 已AC。