why 10*WA
查看原帖
why 10*WA
141335
qwq2519楼主2020/11/16 11:39
#include<bits/stdc++.h>
#define rep(i,j,k) for(register int i(j);i<=k;++i)
#define drp(i,j,k) for(register int i(j);i>=k;--i)
using namespace std;
inline char gt()
{
	return getchar();
//	static char buf[1 << 21], *p1 = buf, *p2 = buf;
//	return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++;
}
template <typename T>
inline void  read(T &x)
{
	register char ch = gt();
	x = 0;
	int w(0);
	while(!(ch >= '0' && ch <= '9'))w |= ch == '-', ch = gt();
	while(ch >= '0' && ch <= '9')x = x * 10 + (ch & 15), ch = gt();
	w ? x = ~(x - 1) : x;
}
template <typename T>
inline void out(T x)
{
	if(x < 0) x = -x, putchar('-');
	char ch[20];
	int num(0);
	while(x || !num) ch[++num] = x % 10 + '0', x /= 10;
	while(num) putchar(ch[num--]);
	putchar('\n');
}
int n;
const int N = 1000079;
char s[N];
int f[N];//ÒÔs[i]½áβµÄ×î´ó³¤¶È
int ans;
//[][]
int main()
{
	scanf("%s", s + 1);
	int n = strlen(s + 1);
	rep(i, 1, n)
	{
		if(s[i] == '(' || s[i] == '[')
			{
				f[i] = 0;
			}
		else if(s[i] == ')' || s[i] == ']')
			{
				if(s[i - 1] == '(' || s[i - 1] == '[')
					{
						if ( ( s[i - 1] == '(' && s[i] == ')' ) || ( s[i - 1] == '[' && s[i] == ']'))
							f[i] =max(f[i], f[i - 1] + 2);
					}
				else if(s[i - 1] == ')' || s[i - 1] == ']')
					{
						if(  (s[i - f[i - 1] - 1] == '(' && s[i] == ')' ) || ( s[i - f[i - 1] - 1] == '[' && s[i] == ']' ) )
							f[i] = max(f[i],f[i - 1] + 2);
					}
				if(s[i-2]==')'||s[i-2]==']')
				{
				 f[i]+=f[i-2];	
				}	
			}
		ans = max(f[i], ans);
	}
//	rep(i,1,n) cout<<f[i]<<' ';
	rep(i, 1, n)
	if(f[i] == ans)
		{
			rep(j, i - f[i] + 1, i)
			cout << s[j];
			return 0;
		}
	return 0;
}
2020/11/16 11:39
加载中...