intさわだんのBlack History

刹那的レジェンドになりたい。

ICPC 国内予選2011B 世界の天秤 AOJ 1173

解法:やるだけ
list使おうと思ったがイテレーターの動きがおかしくやめる→しかたなくbool配列を使ってlistっぽくする→最近のC++でgetsが使えなくなってて泣く→ググってgetlineを見つけてAC

#include <bits/stdc++.h>
#include <stdio.h>
#define chmin(a, b) ((a)=min((a), (b)))
#define chmax(a, b) ((a)=max((a), (b)))
#define fs first
#define sc second
#define eb emplace_back
using namespace std;
 
typedef long long ll;
typedef pair<int, int> P;
//typedef tuple<int, int, int> T;
 
const ll MOD=1e9+7;
const ll INF=1e18;
 
int dx[]={1, -1, 0, 0};
int dy[]={0, 0, 1, -1};


bool ch[150];
int num[150];

int main(){
    while(true){
    //    char data[120];
        string data;
        getline(cin,data);
    //    gets(data);
        if(data[0] == '.') break;
      //  int len = strlen(data);
        int len = data.length();
        int sum = 0;
        for(int i = 0;i < len;i++){
            int add = 0;
            switch(data[i]){
                case '(':
                    add = -1;
                    break;
                case '[':
                    add = -2;
                    break;
                case ')':
                    add = 1;
                    break;
                case ']':
                    add = 2;
                    break;
            }
            if(add == 0)continue;
            ch[sum] = false;
            num[sum++] = add;
        }
        int ans = 1,max = sum;
        while(true){
            if(sum % 2 != 0){ ans = 0; break;}
            if(sum == 0) break;
            int check = 0;
            for(int i = 1;i < sum;i++){
                int a,b;
                int count = 0;
                for(int j = 0;j < max;j++){
                    if(ch[j] == false){
                        count++;
                        if(count == i){
                            a = j;
                        }else if(count == i+1){
                            b = j;
                            break;
                        }
                    }
                }
                if(num[a] + num[b] == 0 && num[a] < num[b]){
                    ch[a] = true; 
                    ch[b] = true;
                    sum -= 2;
                    check = 1;
                    break;
                }
            }
            if(check == 0){ ans = 0; break;}
        }
        if(ans == 1){
            cout << "yes" << endl;
        }else{
            cout << "no" << endl;
        }
    }
}