链接http://poj.org/problem?id=1068
大模拟,计算好数组下标,不难ac,直接上代码吧
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cstring>
#include<sstream>
#include<stack>
#include<queue>
#include<fstream>
#include<algorithm>
#include<map>
#include<set>
#include<vector>
#include<functional>
#include<cmath>
#define CLR(x) memset(x,0,sizeof(x))
#define SETMAX(x) memset(x,0x3f,sizeof(x))
#define SETNO(x) memset(x,-1,sizeof(x))
#define ll long long
#define eps 3e-12
#define pow2(x) ((x)*(x))
#define forto(i,n) for(int i=0;i<n;i++)
#define for1to(i,n) for(int i=1;i<=n;i++)
#define VI vector<int>
using namespace std;
const double PI=acos(-1.0);
#define INF 0x3f3f3f3f
#define NINF 0xbfffffff
int t,n,p,q,m,l,j;
char a[50];
int b[50];
int f[30];
void check(int c,int d)
{
forto(e,d-c)
{
a[m]='(';
m++;
}
a[m]=')';
m++;
//cout<<d-c<<endl;
//cout<<m<<"k"<<endl;
}
int jisuan()
{
int s=1;
while(1)
{
if(a[j]=='(')
{
j++;
s+=jisuan();
}
else
{
f[l++]=s;
j++;
return s;
}
}
}
int main()
{
cin>>t;
while(t--)
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>b[i];
}
m=b[0]+1;
forto(i,m-1)
{
a[i]='(';
}
a[m-1]=')';
for1to(i,n-1)
{
check(b[i-1],b[i]);
}//填充完毕
l=0;
j=0;
jisuan();
cout<<f[0];
for1to(i,n-1)
{
cout<<" "<<f[i];
}
cout<<endl;
}
return 0;
}
forto和for1to是宏,别用,我当时迷上了手速,误入歧途~~