以C++內建隨機演算法討論在規模為K之下的隨機次數之機率準確度

最近好像有關於遊戲抽獎機率問題的爭議。

雖然知道隨機有時是不準的,但我仍想用C++(僅梅克森旋轉演算法)親自嘗試。

以下為測試用程式碼。

#include<bits/stdc++.h>
using namespace std;

//隨機樹使用參數為時間(毫秒)
unsigned seed = chrono::steady_clock::now().time_since_epoch().count();
mt19937_64 rng(seed);
//平均分布
uniform_int_distribution<int> dis(1,100);

long long RandomNumber(){
    return dis(rng);
}

void TestRamdon(int K){
    int mx=0,mn=100000000;
    for(int i=0;i<100000;++i){
        int ct=0;
        for(int j=0;j<K;++j){
            int tp=RandomNumber();
//          1~100 理論隨機 <=10 機率為 0.1(10%)
            if(tp<=10){
                ct++;
            }
        }
        mx=max(ct,mx);
        mn=min(ct,mn);
    }

    long double maxRate=1.0*mx/K;
    long double minRate=1.0*mn/K;

    cout<<"Max Rate In 10^5 Times "<<K<<" Times Random : "<<maxRate<<"\n";
    cout<<"Min Rate In 10^5 Times "<<K<<" Times Random : "<<minRate<<"\n";
    cout<<endl;
}

int main(){
    // test if random K times is enough to get reality rate

    const int K=400;
    const int TestTime=10;

    for(int i=0;i<TestTime;++i){
        TestRamdon(K);
    }
}

經過我實測,在理論機率為 10% 時,測試400次最悽慘的機率約莫落在 0.04(4%) ,而最佳機率則約為 0.17 (17%)

測試結果 K=400

Max Rate In 10^5 Times 400 Times Random : 0.17
Min Rate In 10^5 Times 400 Times Random : 0.0375 

Max Rate In 10^5 Times 400 Times Random : 0.1775
Min Rate In 10^5 Times 400 Times Random : 0.0425 

Max Rate In 10^5 Times 400 Times Random : 0.17
Min Rate In 10^5 Times 400 Times Random : 0.04   

Max Rate In 10^5 Times 400 Times Random : 0.1675
Min Rate In 10^5 Times 400 Times Random : 0.0325 

Max Rate In 10^5 Times 400 Times Random : 0.165
Min Rate In 10^5 Times 400 Times Random : 0.0375 

Max Rate In 10^5 Times 400 Times Random : 0.17
Min Rate In 10^5 Times 400 Times Random : 0.0375 

Max Rate In 10^5 Times 400 Times Random : 0.17
Min Rate In 10^5 Times 400 Times Random : 0.0425 

Max Rate In 10^5 Times 400 Times Random : 0.17
Min Rate In 10^5 Times 400 Times Random : 0.045  

Max Rate In 10^5 Times 400 Times Random : 0.165
Min Rate In 10^5 Times 400 Times Random : 0.0425 

Max Rate In 10^5 Times 400 Times Random : 0.17
Min Rate In 10^5 Times 400 Times Random : 0.0375

而到底應該要幾次以上才會到min=0.09(9%)呢?歡迎各位親自嘗試。以下是關於我有測試的次數

K=10

Max Rate In 10^5 Times 10 Times Random : 0.6
Min Rate In 10^5 Times 10 Times Random : 0  

Max Rate In 10^5 Times 10 Times Random : 0.7
Min Rate In 10^5 Times 10 Times Random : 0  

Max Rate In 10^5 Times 10 Times Random : 0.7
Min Rate In 10^5 Times 10 Times Random : 0

Max Rate In 10^5 Times 10 Times Random : 0.7
Min Rate In 10^5 Times 10 Times Random : 0

Max Rate In 10^5 Times 10 Times Random : 0.7
Min Rate In 10^5 Times 10 Times Random : 0

Max Rate In 10^5 Times 10 Times Random : 0.6
Min Rate In 10^5 Times 10 Times Random : 0

Max Rate In 10^5 Times 10 Times Random : 0.7
Min Rate In 10^5 Times 10 Times Random : 0

Max Rate In 10^5 Times 10 Times Random : 0.8
Min Rate In 10^5 Times 10 Times Random : 0

Max Rate In 10^5 Times 10 Times Random : 0.7
Min Rate In 10^5 Times 10 Times Random : 0

Max Rate In 10^5 Times 10 Times Random : 0.6
Min Rate In 10^5 Times 10 Times Random : 0

K=100

Max Rate In 10^5 Times 100 Times Random : 0.25
Min Rate In 10^5 Times 100 Times Random : 0      

Max Rate In 10^5 Times 100 Times Random : 0.25
Min Rate In 10^5 Times 100 Times Random : 0      

Max Rate In 10^5 Times 100 Times Random : 0.25
Min Rate In 10^5 Times 100 Times Random : 0      

Max Rate In 10^5 Times 100 Times Random : 0.26
Min Rate In 10^5 Times 100 Times Random : 0      

Max Rate In 10^5 Times 100 Times Random : 0.25
Min Rate In 10^5 Times 100 Times Random : 0      

Max Rate In 10^5 Times 100 Times Random : 0.25
Min Rate In 10^5 Times 100 Times Random : 0      

Max Rate In 10^5 Times 100 Times Random : 0.25
Min Rate In 10^5 Times 100 Times Random : 0      

Max Rate In 10^5 Times 100 Times Random : 0.25
Min Rate In 10^5 Times 100 Times Random : 0      

Max Rate In 10^5 Times 100 Times Random : 0.25
Min Rate In 10^5 Times 100 Times Random : 0      

Max Rate In 10^5 Times 100 Times Random : 0.25
Min Rate In 10^5 Times 100 Times Random : 0

K=1000

Max Rate In 10^5 Times 1000 Times Random : 0.148
Min Rate In 10^5 Times 1000 Times Random : 0.061 

Max Rate In 10^5 Times 1000 Times Random : 0.143
Min Rate In 10^5 Times 1000 Times Random : 0.061 

Max Rate In 10^5 Times 1000 Times Random : 0.143
Min Rate In 10^5 Times 1000 Times Random : 0.063 

Max Rate In 10^5 Times 1000 Times Random : 0.147
Min Rate In 10^5 Times 1000 Times Random : 0.063 

Max Rate In 10^5 Times 1000 Times Random : 0.143
Min Rate In 10^5 Times 1000 Times Random : 0.063 

Max Rate In 10^5 Times 1000 Times Random : 0.144
Min Rate In 10^5 Times 1000 Times Random : 0.061 

Max Rate In 10^5 Times 1000 Times Random : 0.146
Min Rate In 10^5 Times 1000 Times Random : 0.055 

Max Rate In 10^5 Times 1000 Times Random : 0.144
Min Rate In 10^5 Times 1000 Times Random : 0.061 

Max Rate In 10^5 Times 1000 Times Random : 0.145
Min Rate In 10^5 Times 1000 Times Random : 0.061 

Max Rate In 10^5 Times 1000 Times Random : 0.142
Min Rate In 10^5 Times 1000 Times Random : 0.061

但是剛剛測測試次數皆為10^5,若換成10^6呢?

Max Rate In 10^6 Times 400 Times Random : 0.1775
Min Rate In 10^6 Times 400 Times Random : 0.03

變成 0.03(3%) !

不得不說,跟我想的好像不一樣。希望大家自己測試,筆者因為電腦不夠好(i5古早版本)只能做到這了。

在我的 Mac mini 上安裝 Pop!_OS 21.10

前言

Mac mini 2014 年末的機器,算不算老?

不久前,我在一部親友淘汰的機器上 安裝 Pop!_OS 21.04 與嘸蝦米 – jute,讓一部跑起 Windows 7 已氣喘呼呼的機器,轉而成為文書工作小幫手。

今天,我會再對 Mac mini 下手,原因是我想用 DaVinci Resolve 17,順順跑的 macOS High Sierra 已不支援,原以為系統將系統升級到 macOS Mojave 應該會比較快,想不到這個升級就花掉 1 小時又 10 分鐘左右。

升級完 macOS Mojave 之後,DaVinci Resolve 17 硬是卡在安裝過程,光是解開安裝檔的虛擬硬碟,就讓記憶體直接被吃好吃滿,Finder 當掉好幾次之後,我就決定把方向轉到 Linux 身上。

安裝 Pop!_OS 21.10

  1. 先處理硬碟:我的做法是把久久未用的 Bootcamp 刪除,分割給 Linux 安裝與使用。

  2. Pop!_OS 21.10 要求 /boot 至少要 500MB,我再分割 2GB 給 Swap,其他的硬碟空間就掛載在 / 這裡。(這樣,算是簡單粗暴嗎?)
  3. 快速完成:我自己對 ubuntu 與它的衍生版本的觀察,硬碟分割好的下一步,不用等太久,就可以重新開機(下圖)。但,重開機後,畫面黑中帶光,我一度以為安裝失敗,還好稍稍耐著性子,就看到右下角若隱若現的鼠標,不久後就會進到系統登入畫面。

安裝嘸蝦米

  1. 先從嘸蝦米官網將 iBus 表格檔載回來安裝,之前曾經在 在 ubuntu 20.04 安裝官方嘸蝦米的 iBus 表格檔 – jute 分享過對應的表格檔版本。
  2. 安裝好之後,再到「設定值」裡面的「鍵盤」,點「+」(加號)把「中文(嘸蝦米-繁)」加進來。
  3. 如果在這裡沒有看到嘸蝦米的話,要重新登入或是重新開機。

安裝 DaVinci Resolve 17

  1. 這是我今天的主要目的,但我認為很有可能安裝不起來,或是安裝完之後,也無法使用。
  2. DaVinci Resolve 17 官方提供的檔案裡,就有安裝的相關說明,我按表操課就順利安裝上來。
  3. 嗯,目前還是無法使用,我嘗試調整一些 GPU 的設定,觀察到這部老 Mac mini 應該無法使用 DaVinci Resolve 17
  4. 2014 年末 Mac mini 是真的夠老了,也不好太為難它,姑且,另外找一部 Wintel 的機器來跑 DaVinci Resolve 17

後記

  1. 參考網站:
    (1)Pop!_OS by System76
    (2)System76 – Linux Laptops, Desktops, and Servers
    (3)行易有限公司 :: 嘸蝦米輸入法
    (4)DaVinci Resolve 17 | Blackmagic Design
    (5)Wintel – 維基百科,自由的百科全書
  2. 本次安裝使用的 ISO 檔版本是 pop-os_21.10_amd64_intel_3.iso。
  3. 硬體:Mac mini 2014 年末。
  4. 有別於上次佔滿整部 Mac mini 的 Arch Linux 被我砍掉,今次走的是雙系統,而且這次的 Pop!_OS 21.10 我原則上會先保留,需要用到 iTunes、相簿與 iMovie 時,我再切換到 macOS,而切換的方式「只能」在開機時按住 Option 鍵,再找到我想使用的系統,這一點非常合我意。
  5. macOS Mojave 在這一部 Mac mini 上的效能,實在讓人難以接受,我已經趕在聖誕節結束前,砍掉 macOS Mojave,灌回 macOS High Sierra。

升級 Windows 11 後的第 73 天

前言

今年 10 月 8 日,我找了一部非工作用的機器,將裡面的 Windows 10 升級至 Windows 11(詳可見:升級與使用 Windows 11 與嘸蝦米幾個小時後),順順用到昨天上午,下午要開機使用時,卡在登入畫面很久,轉呀轉的,就是是進不了系統。

最後迎來的,就是整個系統崩潰(主機板無法抓到 SSD,顯示 No Bootable Device),這…,算是嚴重災情吧!

以 Windows 10 滿血回歸後…

  1. 還升不升級 Windows 11?答案當然是「暫時就別了吧!」
  2. 事發之前,我注意到一則消息:微軟 Windows 11 傳出災情 電腦 SSD 硬碟速度被腰斬 | 生活 | CTWANT,因此,這幾天一收到更新訊息,我就立馬將 Windows 11 更新上去。
  3. 不確定是不是 Windows 11 讀 SSD 有狀況而讓機器掛點,但,作業系統回復後,我還是去看了一下筆電上的 SSD 品牌、型號,在不拆機的狀況,我認為機器上應該是 CA3 M.2 2280 NVMe PCIe 固態硬碟 | 資料中心SSD 固態硬碟 | – 建興儲存科技股份有限公司 的 512 MB 版本。

後記

  1. 考量到產品保固,我並沒有自己做 Trouble Shooting,但,通常這樣的狀況,我會先進入 BIOS,看看主機板與儲存裝置(SSD 或是 Hard Disk)間的連結是不是正常的,如果是正常的,我會再拿一支可開機的系統隨身碟(Windows 或 Linux 的都好),試著從這支隨身碟開機後,再觀察儲存裝置的讀寫是不是正常的,沒問題的話,再走一趟格式化,最後,重新安裝作業系統。
  2. 從 Windows 10 開始,我算滿常遇到「升級就容易出事」的狀況,其他家公司的作業系統(或嵌入式系統)相關產品,也同樣容易出事,就看是誰遇到而已,End User 能夠做的,似乎就是升級前先備份,或是如果升級的項目非使用需要,就乾脆等待、觀察一段時間再說。今次,還好我是在非工作用的電腦升級,不然,這種狀況要是又遇到有案子要處理,真是媽媽咪呀!

開箱「適用於 AirTag 的 Belkin Secure Holder (附鑰匙圈) – 黑色」

前言

緊接著在 開箱「適用於 AirTag 的 Belkin Secure Holder (附鑰匙圈) – 粉紅色」 之後,我就給自己也買一組。

開箱影片(Powered by Youtube)

後製時,整部片都用 2 倍速快轉。

開箱前的準備

  1. 務必錄影:與實體店面不太一樣的地方,就是實體店面是店員負責開箱,並且帶著消費者檢查與檢測商品。電商入手,送到家的商品,尤其是 3C 產品,我一定會架好錄影設備再開箱。去年我在「雙11」入手筆電時,還好有錄影,廠商也就很乾脆地退貨,…雖然,花了好一段時間才搞定。
  2. 錄影設備:本次使用的錄影機器為 SONY HDR-XR100。

再買一支原因是?

  1. 我也想用:呃…,之前的,當然是我老婆在用,我要用的話,自然得掏腰包再買一個。
  2. 有備無患:不知道從什麼時候開始,我就不再與自己的忘性對抗,而是讓習慣來減少自己可能會落東落西的次數與頻率,即使如此,我還是給自己的包包放一個 AirTag,為的就是避免「偶爾還是會發生隨手一放,記憶影像根本沒輸入腦袋的狀況」。

後記

  1. 開箱費用:312 元,價格可能會有波動,請以賣場售價為主。
  2. 入手方式:PChome 24h購物購入(Belkin AirTag 專用保護套鎖匙扣 – PChome 24h購物)
  3. 官網資料:適用於 AirTag 的 Belkin Secure Holder (附鑰匙圈) – 黑色 – Apple (台灣)
  4. 附帶一提:為了避免不肖人士,蘋果在 Android 上的 Google Play 商店釋出可以掃瞄 AirTag 的 App(Tracker Detect – Apps on Google Play),目的似乎是為了讓任何使用者可以進行反追蹤的動作,但不知是我不太會用,還是哪裡的設定沒做好,基本上是掃瞄不到的。

開箱 Anker A2633 PowerPort III Nano 20W

前言

不多說,直接進入主題。

開箱照片(點圖至 Flickr 瀏覽相簿)

有點不好意思,這次用 iPhone 13 拍攝,在沒有開啟參考線的狀況下,我在入鏡的角度上,都沒有抓得很好。另外,本次開箱,同場加映「裸裝 USB-C to Lightning充電線兩入組(1.8M+0.9M)」。

ankerA2633Nano20W

開箱 0.5 小時左右的心得

  1. 實測感受:沒有工具來提供測試數據,這一點是比較不好意思的。
  2. 在 iPhone 13 實際使用 vs. 數學計算:
    (1)我使用了 iPhone SE 2020、iPad mini 第 5 代來充電;前者已經是 95% 的電量,後者則是 82 % 的電量,不曉得是不是因為充電保護的關係,充了 5 分鐘以上,並沒有明顯「快速」的感覺,甚至,iPhone SE 2020 上面所呈現的電量是一動也不動。
    (2)iPhone 13 則是在 78%、68%、74% 的電量下進行充電,每次充電的時間不太一樣,分別充電 5 分鐘、8 分鐘與 10 分鐘後,電量達到 81%、74% 與 82%,感受較為明顯。但是,這樣的速度(以最後一次的 10 分鐘,充電 8% 來算的話)似乎並沒有達到官方的說法:「您可以在大約 30 分鐘內,為 iPhone 8 和後續機型快速充電達 50%的電池電量。」(詳可參考:為 iPhone 快速充電 – Apple 支援 (台灣)
    (3)先不管官方的說法,我想說,不如來做一點算數。就我查到的資料,iPhone 12 的電量是 2775mAh;iPhone 13 是 3227mAh。iPhone 12 的 50% 電量是 2775mAh/2=1387.5mAh,30 分鐘可以充 50%,所以每分鐘可以充:1387.5/30(分鐘)=46.25mAh/分鐘;以這樣的速度來看 iPhone 13,要充到 50% 的電量所需要的時間是:3227/2/46.25=34.88 分鐘,取整數為 35 分鐘,也就是說,按照計算來看的話,iPhone 13 會多花個 5 分鐘。然而,從我自己使用 3 次充電的紀錄來看,分別是 3227*3%/5=19.362mAh/分鐘、3227*6%/8=24.2025mAh/分鐘、3227*8%/10=25.816mAh/分鐘,通通跟上面得出的 46.25mAh/分鐘有差距,由此看來,就有那麼點不確定是不是充電頭可能有問題。
  3. 失望難免:我從 moto g6、Redmi Note 8 Pro、SAMSUNG Note 20、Nokia 8.3 5G 到 realme GT Neo2 一路走來,只能說 Android 陣營在充電這個部分的進步,讓人非常有感,尤其最近在用 SuperDart,那種秒回血的感覺,真的很爽。相較蘋果,僅管 iPhone 包裝已經沒有所謂的祖傳豆腐頭,但今天用上了比較快的充電設備,竟不免讓祖傳感上身,還真的有些許失望,只能設想,如果豆腐頭本身的問題排除的話,那麼,這樣的速度可能是蘋果為了保護電池吧!?

後記

  1. (1)開箱費用:830 元,價格可能會有波動,請以賣場售價為主。
    (2)Anker A2633 PowerPort III Nano 20W:390 元。
    (3)裸裝 USB-C to Lightning充電線兩入組(1.8M+0.9M):490 元。
    (4)下訂時,另外再折扣 50 元。
  2. 入手方式:從 蝦皮商城 購入。
  3. 參考資料:
    (1)Anker A2633 PowerPort III Nano 20W PD極速充電器 【台灣總代理 群光公司貨】 | 蝦皮購物
    (2)【ANKER USB-C to Lightning充電線兩入組 1.8M+0.9M 【裸裝+7日保固+總代理原廠公司貨】 | 蝦皮購物
  4. 其他:是從 iPhone 12 開始的嗎?蘋果把自家祖傳豆腐頭砍掉,再讓消費者依照自己的需求或選擇,決定要不要另外再入手所謂的快充豆腐頭。蘋果是真的關注環保議題,還是一波操作呢?我是認為,直接把一些配備移除,這樣的做法,在蘋果來說,早有前例,也通常是多方考量的結果,例如:第一代 iMac 問世時,將軟碟機拔掉。但是,太用「為環保而戰」的說詞,顯然不是人人願意接受,卻也只能乖乖埋單。

AtCoder ABC 215 D

題目連結:AtCoder Beginner Contest 215: D – Coprime 2

題目敘述 :

給定 n, m 下一行會有 n 個數字,輸出所有k in 1~m,k是與所有數字皆互質的數。

範例輸入 1 :

3 12
6 1 5

範例輸出 1 :

3
1
7
11

題解 :

用埃氏篩法在log(n)的時間內做質因數分解,接著將所有數字的質因數聯集存在bitset中,最後判斷1~m的所有數字的質因數之中有無存於bitset中。

#include<bits/stdc++.h>
using namespace std;

using ll=long long;
const ll N=100010;
#define IO_SPEEDUP ios::sync_with_stdio(0);cin.tie(0);
#define IO_INIT cout<<fixed<<setprecision(6);

int n,m;
int pri[N];
bitset<N> bt;

void init(){
    pri[1]=0;
    for(int i=2;i<N;++i){
        if(pri[i]==0){
            pri[i]=i;
            for(ll k=(ll)i*i;k<N;k+=i)
                pri[k]=i;
        }
    }
}

void div(int n){
    while(pri[n]>0){
        bt[pri[n]]=true;
        n/=pri[n];
    }
}

bool check(int n){
    while(pri[n]>0){
        if(bt[pri[n]]){
            return false;
        }
        n/=pri[n];
    }
    return true;
}

int main(){
    IO_SPEEDUP; IO_INIT;

    cin>>n>>m;
    init();

    for(int i=0;i<n;++i){
        int a;
        cin>>a;
        div(a);
    }

    vector<int> ans;
    for(int i=1;i<=m;++i){
        if(check(i)){
            ans.emplace_back(i);
        }
    }

    cout<<ans.size()<<"\n";
    for(auto i:ans){
        cout<<i<<"\n";
    }
}

在 Linux Mint 20.2 上輕鬆安裝嘸蝦米

前言


Linux Mint 是 ubuntu 的衍生發行版(Distro),它的使用介面(Cinnamon Edition),我也滿喜歡的。

在 Linux Mint 20.2 上安裝嘸蝦米

  1. 選用的順序上,我的建議是 fcitx4→iBus→fcitx5。
  2. 跟 ubuntu 幾乎一樣是下一道指令就搞定一半:sudo apt-get install fcitx-table-boshiamy
  3. 到「偏好設定」裡的「Fcitx 設定」去確認相關設定,講起來好像在繞口令,這個部分我個人比較習慣用圖形介面來解決(如下圖)。

後記

  1. 參考網站:Linux Mint
  2. 本次安裝使用的 ISO 檔版本是 linuxmint-20.2-cinnamon-64bit.iso。
  3. 本來在 Linux Mint 20.2 上安裝嘸蝦米是被我置入在一篇貼文 (在 Linux 上輕鬆安裝 Fcitx 與嘸蝦米) 裡,主要是想要表達,使用 fcitx 這一個平台,要安裝、設定嘸蝦米還滿簡單的,不過,我在貼文裡,有二張圖片配上幾句話,表示「一樣一道指令就可以完成…」。
  4. 到底,自己當時下的指令是什麼?我還真的一時腦袋空空停在電腦螢幕前面,所以,我決定另外寫一篇 Linux Mint 的安裝筆記,感覺會比較妥當。

AtCoder ABC 215 C

題目連結:AtCoder Beginner Contest 215: C – One More aab aba baa

題目敘述 :

輸出 S 中字典順序第 K 大的排列.

範例輸入 1 :

aab 2

範例輸出 1 :

aba

範例輸入 2 :

ydxwacbz 40320

範例輸出 2 :

zyxwdcba

題解 :

用內建函式next_permutation()可以生成字典序大一點的排列。

#include<bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(0);cin.tie(0);

    string str;
    int n;

    cin>>str>>n;

//  因為沒有說輸入的會是字典序最小的,因此要先排序
    sort(str.begin(),str.end());
//  會是n-1是因為還沒進行前就是最小(第k=1小)
    for(int i=0;i<n-1;++i){
        next_permutation(str.begin(),str.end());
    }
    cout<<str;
}

AtCoder ABC 215 B

題目連結:AtCoder Beginner Contest 215: B – log2(N)

題目敘述 :

輸入正整數 N, 輸出最大整數 k 使 2^k≤N.

範例輸入 1 :

1000000000000000000

範例輸出 1 :

59

範例輸入 2 :

6

範例輸出 2 :

2

題解 :

用迴圈循環計算。 在整數運算時 ans<<=1 相當於 ans*=2

#include<bits/stdc++.h>
using namespace std;

int main(){
    ios::sync_with_stdio(0);cin.tie(0);

    long long n;
    cin>>n;

    int ct=0;
    long long ans=1;
    while(ans*2<=n){
        ans<<=1;
        ct++;
    }
    cout<<ct;
}

注意!

用內建函式log2(n)式不會過的喔!

AtCoder ABC 215 A

題目連結:AtCoder Beginner Contest 215: A – Your First Judge

題目敘述 :

給定一個字串 S, 輸出 AC 若 S=="Hello,World!" 否則輸出 WA.

輸入說明 :

輸⼊一行字串

範例輸入 1 :

Hello,World!

範例輸出 1 :

AC

範例輸入 2 :

Hello,world!

範例輸出 2 :

WA

題解 :

直接判斷即可(s == "Hello,World!")

#include<bits/stdc++.h>
using namespace std;

int main(){
    ios::sync_with_stdio(0);cin.tie(0);

    string ipt;
    cin>>ipt;
    if(ipt=="Hello,World!"){
        cout<<"AC";
    }else{
        cout<<"WA";
    }
}