【poj1048 Parencodings】(模擬水題)
阿新 • • 發佈:2019-02-06
連結:http://poj.org/problem?id=1068
題意:給出一串陣列:a[i]表示第i個右括號前面有幾個左括號,求出每個右括號所包含的括號數
分析:模擬。根據已知的陣列,模擬得到一個字串陣列,再模擬每個右括號的括號數
程式碼:
#include<cstdio> #include<queue> using namespace std; const int maxn=1000006; int t; int n; int a[maxn]; int vis[maxn]; char s[maxn]; queue<int>q; int main(){ scanf("%d",&t); while(t--){ memset(vis,0,sizeof(vis)); scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&a[i]); } int k=0; for(int i=0;i<n;i++){ for(int j=0;j<a[i]-a[i-1];j++){ s[k++]='('; } s[k++]=')'; } for(int i=0;i<k;i++){ if(s[i]==')'){ int cnt=0; for(int j=i-1;j>=0;j--){ if(s[j]=='('){ if(vis[j]){ cnt++; }else{ vis[j]=1; q.push (cnt+1); goto T; } } } T:; } } printf("%d",q.front ());q.pop(); while(q.size ()){ printf(" %d",q.front()); q.pop (); } printf("\n"); } }