Problem:


()

Problem Statement

文字列Sがある．はじめ，Sは空文字列である．

以下の処理をn個順番に行う．

Sの末尾にp_i(="("または")")をx_i個追加する．

処理を施した後，Sがバランスのとれた文字列であるかどうか判定せよ．

「文字列のバランスが取れている」とは，次のように定義される．

空文字列はバランスが取れている．

バランスの取れている文字列aとbに対して，a + b(+は文字列の連結を表す)はバランスが取れている．

バランスの取れている文字列aに対して，"(" + a + ")"はバランスが取れている．

Input

入力は以下の形式に従う．与えられる数は全て整数である．

n
p_1 x_1
. . .
p_n x_n

Constraints

1≦n≦1,000

1≦x_i≦10^6

p_iは"("または")"

Output

バランスがとれているときは"YES"を，そうでなければ"NO"を1行に出力せよ．

Sample Input 1

3
( 5
) 4
) 1

Output for the Sample Input 1

YES

文字列S="&#x28;&#x28;&#x28;&#x28;&#x28;&#x29;&#x29;&#x29;&#x29;&#x29;"はバランスがとれている．

Sample Input 2

5
( 2
) 2
( 3
) 1
) 2

Output for the Sample Input 2

YES

Sample Input 3

2
) 1
( 1

Output for the Sample Input 3

NO



Sample input:
3
( 5
) 4
) 1


Sample output:
YES

Submission status: Memory Limit Exceeded

Solution code:
S = []
for i in range(input()):
	p,x = raw_input().split()
	S += [p]*int(x)
i = 0
while i < len(S) - 1:
	if S[i] + S[i+1] == "()":
		del S[i+1]
		del S[i]
		i = 0
	else:
		i += 1
print "YES" if len(S) == 0 else "NO"

Submission status: Accepted

Solution code:
n = int(input())
pos = 0

flag = True
for _ in range(n):
    k, num = input().split()
    num = int(num)
    if k == "(":
        pos += num
    else:
        pos -= num

    if pos < 0:
        flag = False

if not flag or pos != 0:
    print("NO")
else:
    print("YES")

Submission status: Accepted

Solution code:
a=0
for _ in range(int(input())):
    b,c=input().split()
    a+= int(c) if b=='(' else -int(c)
    if a<0:print('NO');break
else: print('NO' if a else 'YES')

Submission status: Accepted

Solution code:
a=0
for _ in range(int(input())):
    b,c=input().split()
    a+=int(c) if b=='(' else -int(c)
    if a<0:break
print('NO' if a else 'YES')

Submission status: Accepted

Solution code:
n = input()
m = 0
for i in range(n):
  (p, x) = raw_input().split()
  x = int(x)

  if p == "(":
    m += x
  else:
    m -= x

  if m < 0:
    print "NO"
    quit()

if m:
  print "NO"
else:
  print "YES"

Submission status: Accepted

Solution code:
S = 0
for i in range(input()):
	p,x = raw_input().split()
	x = int(x)
	S += x if p == "(" else -x
	if S < 0:
		break
print "YES" if S == 0 else "NO"

Submission status: Accepted

Solution code:
n = int(input())
b = 0
ans = True
for _ in range(n):
    p, x = input().split()
    x = int(x)

    if p == "(":
        b += x
    else:
        b -= x
        if b < 0:
            ans = False

if ans:
    if b == 0:
        print("YES")
    else:
        print("NO")
else:
    print("NO")

Submission status: Accepted

Solution code:
n = int(input())
s = 0
f = 0
for i in range(n):
    p,x = input().split()
    x = int(x)
    if p == "(":
        s += x
    else:
        s -= x
        if s < 0:
            f = 1
if f or s != 0:
    print("NO")
else:
    print("YES")

Submission status: Accepted

Solution code:
n=int(input())
a,b=0,0
flag=0
for i in range(n):
    p,x=map(str,input().split())
    if p=="(":a+=int(x)
    else:b+=int(x)
    if a<b:
        flag=1
        break
if flag==1 or a!=b:print("NO")
else:print("YES")

Submission status: Runtime Error

Solution code:
s=""
for i in range(input()):
    p,x=raw_input().split()
    s+=p*int(x)
st=[]
for i in range(len(s)):
    if s[i]=="(":
        st.append(s[i])
    else:
        if st==[] or st[-1]!="(":
            print "NO"
            break
        st.pop()
else:
    if st==[]:
        print "YES"
    else:
        print "NO"