标签:
看成括号序列的话第二种方法其实就是左括号和右括号之间有多少对完整的括号。
#include<cstdio> #include<cstring> #include<cctype> #include<algorithm> using namespace std; #define rep(i,s,t) for(int i=s;i<=t;i++) #define dwn(i,s,t) for(int i=s;i>=t;i--) #define clr(x,c) memset(x,c,sizeof(x)) int read(){ int x=0;char c=getchar(); while(!isdigit(c)) c=getchar(); while(isdigit(c)) x=x*10+c-‘0‘,c=getchar(); return x; } char s[20]; void print(int x){ int cnt=0; while(x) s[++cnt]=x%10,x/=10; dwn(i,cnt,1) putchar(s[i]+48); putchar(32); } const int nmax=1e6+5; int a[nmax],ans[nmax<<1]; int main(){ int n=read(),cur=n*2;rep(i,1,n) a[i]=read(); dwn(i,n,1) { while(ans[cur]&&cur) --cur; ans[cur--]=1;ans[cur-a[i]*2]=-1; } int cnt=0; rep(i,1,n*2) { if(ans[i]<0) ++cnt; else{ print(cnt); } } printf("\n"); return 0; }
第一行一个整数n,表示序列的长度(0 < n <=1000000) 第二行n个整数,表示第二种方法的记录。
一行,空格分隔的n个整数,表示第一种表示方法的序列。
5 0 0 0 2 4
2 4 5 5 5
标签:
原文地址:http://www.cnblogs.com/fighting-to-the-end/p/5910714.html