제출 #150111

#제출 시각아이디문제언어결과실행 시간메모리
150111graneli (#200)HicCup (FXCUP4_hiccup)C++17
24 / 100
32 ms5248 KiB
#include "hiccup.h"
#include <bits/stdc++.h>
#define F first
//#define S second
#define mp make_pair
#define pb push_back
//#define ll __int128
#define ll long long
#define LEFT(a) ((a)<<1)
#define RIGHT(a) (LEFT(a) + 1)
#define MID(a,b) ((a+b)>>1)
#define MAX(a,b) ((a)>(b)?(a):(b))
#define MIN(a,b) ((a)<(b)?(a):(b))
#define y1 y122
using namespace std;

const int N = 1000005;

int n;
int x, y, z;
string s;
string S;
stack < int > St;

bool check (int num){
    while (St.size() > 0)
        St.pop();
    s = "#HC";
    for (int i = 0; i < num; i++)
        s += "!";
    int m = num + 2;
    bool ok = 0;
    for (int i = 1; i <= n; i++){
        if (S[i] == 'H')
            St.push (0);
        if (St.size() == 0 && S[i] == 'C')
            return 0;
        if (St.size() == 0 && ok == 0)
            return 0;
        if (St.size() == 0)
            continue;
        x = St.top() + 1;
        if (S[i] != s[x]){
            if (S[i] != '!' || ok == 0)
                return 0;
            continue;
        }
        St.pop();
        if (x < m)
            St.push (x);
        else
            ok = 1;
    }
    if (St.size() == 0)
        return 1;
    return 0;
}


int HicCup(string str) {
    S = str;
	n = (int)S.size();
	S = "#" + S;
	for (int i = 1; i <= n; i++){
        if (S[i] == 'H')
            x++;
        else if (S[i] == 'C')
            y++;
        else
            z++;
	}
	if (x != y)
        return -1;
    int l = -1, r = z / x;
    while (l < r){
        int mid = l + r + 1 >> 1;
        if (check (mid))
            l = mid;
        else
            r = mid - 1;
    }
    /*bool ok = check (0);
    if (ok == 0)
        return -1;*/
    return l;
}

컴파일 시 표준 에러 (stderr) 메시지

hiccup.cpp: In function 'int HicCup(std::__cxx11::string)':
hiccup.cpp:76:25: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
         int mid = l + r + 1 >> 1;
                   ~~~~~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...