28. 助教的心情會反映在題目上

0 Judge

Code: 0


\( \newcommand{\ord}[1]{\mathcal{O}\left(#1\right)} \newcommand{\abs}[1]{\lvert #1 \rvert} \newcommand{\floor}[1]{\lfloor #1 \rfloor} \newcommand{\ceil}[1]{\lceil #1 \rceil} \newcommand{\opord}{\operatorname{\mathcal{O}}} \newcommand{\argmax}{\operatorname{arg\,max}} \newcommand{\str}[1]{\texttt{"#1"}} \)

助教的心情會反映在題目上

題目敘述

sprout
ㄠㄨ

卦長喜歡喝擁有強烈酒精的飲料。有一次因為喝了1/4瓶伏特加,精神已經達到萎靡的狀態,在廚房裡遇到兩名競程的學生,張XX和莊XX,只記得在和他們玩了一下之後,就有人覺得寫程式這件事沒什麼,當下就想到了一種特殊的題目-古可魚語,來反擊他。

由於很多人都覺得寫非演算法型的程式沒什麼,所以我決定讓各位體會一下真正的暴力題是什麼感覺。現在有一種稱為$SM$語的語言,他是一種基于過程的語言(procedure-based language),是由一堆函數所組成的,函數裡面可以呼叫其他函數。在$SM$語中所有的變數都是binary類型,即只有0和1,且變數名稱一定是英文字母。他還是無空白程式語言,假設有一個$SM$語言的程式,在其任何位置加上或減去任意的空白、換行等字元(' ','\n','\r','\t'...),都是和原來的程式等價的。接下來會描述他所有的合法狀態(statement):

  • a=b;
    讓變數a變成b的值,b可以為當前函數內的所有變數,或binary(1 or 0)
  • a=!b;
    讓變數a變成b的值取not,b可以為當前函數內的所有變數,或binary(1 or 0)
  • {S1 S2 S3 S4...}
    程式碼區塊,其中S1、S2...是其他任意合法狀態
  • f(x1,x2,...);
    呼叫某個函數f,他的參數為x1,x2...,以逗號隔開,參數可以是當前函數內的所有變數,或binary(0 or 1)
  • if( C ) B1 else B2
    這裡C是if的條件,B1和B2是程式碼區塊。如果條件C成立,則執行B1區塊,忽略B2區塊,否則執行B2區塊,忽略B1區塊。
    條件C是由括號來表示運算優先順序,其中有三種運算符號:&|^,他們的定義和C++中的一樣,不同的是他們沒有運算優先順序,括號內的東西要先算,裡面運算的元素可以是binary或是當前函數內的所有變數
    像這樣就是一個條件:(a)^(b&(c|(((d)))))

一個函數的定義為<函數名稱>(<變數序列>) B,這裡B是一個程式碼區塊,變數序列的變數以逗號(,)隔開,而所謂的"當前函數內的所有變數"即為這個函數中所傳入的變數,我們保證函數名稱和變數名稱不會是if或else。像是f(x){gg=1;}這樣就不是一個合法的函數。我們保證輸入不會不合法的函數,再輸入完所有函數後,如果有任何函數會發生無限遞迴,請輸出SM,否則輸入MS。

輸入說明

輸入會包含一個到多個函數,函數名稱及變數名稱不會超過100個字元,不會有不合法的語法出現,保證同一個函數中不會有相同的變數名稱及變數名稱和函數名稱相同的情況,以EOF作為結束。

輸出說明

若其中任何一個函數在某些特定的參數下會無限遞迴,就輸出SM,否則輸出MS。

範例輸入 1

as   d f(x        ,      y,z){
    z=x;
    x=y;
    y=z;
    if(x){
        asd as da(x,y,z,x,y,z,y);
    }else{

    }
}
asdasd a(a,b,c,d,e,f,g){
    a=!a;
    if(a^b&(c|d)){
        c=a;
        as  df(a,b,c);
    }else{
        b=a;
    }
}

範例輸出 1

MS

範例輸入 2

f(x){
    x=!1;
    x=!x;
    if(x&1){
        {
            {
                {}
            }
        }
        f(x);
    }else{
        {{{{{{{{{{{f(0);f(1);{{}f(0);}}}}}f(1);}}}}}}}
        f(0);
    }
}

範例輸出 2

SM

範例輸入 3

f(){
  if(1|1&0){

    }else{
        {
            {f();}
        }
    }
}

範例輸出 3

SM

範例輸入 4

f(){{{{}}}}

範例輸出 4

MS

配分方法

  • 0% 範例測資
  • 10% 只有一個函數,變數個數最多只有一個
  • 10% 只有一個函數,變數個數$\leq 5$個
  • 20% 多個函數($\leq 3$個),變數個數$\leq 5$個
  • 60% 多個函數($\leq 5$個),每個函數變數個數$\leq 15$個

Hints

STL暴力去解它吧!

備註

我會抓抄襲喔

Judge Setting

run-time limit: 400 ms
memory limit: 32796672 byte
測資數量: 0