在 Lubuntu 18.04 上安裝 CodeBlocks IDE 17.12

寫程式,弄個 IDE 真的會方便不少,如果您是要在 ubuntu 20.04 上面使用 Code::Blocks IDE 的話,直接下 sudo apt-get install codeblocks 這道指令,那麼,Code::Blocks IDE 20.03 就會安裝好,立馬可以進行 Coding。

由於我想用 Code::Blocks IDE 17.12 這個版本,而且是在 Lubuntu 上面安裝,就需要繞一點路,費一點小功夫。

先是安裝 gcc、gpp 與 g++。

再來是從官網下載 Code::Blocks IDE 17.12 的安裝檔。

最後,使用 dpkg 把程式裝起來,過程有點狀況,我試著用 sudo apt –fix-broken install 解決。

台中女中-109-6 超級大轉機

用到了 Bellman-Ford Shortist Path Algorithm

#include<iostream>
using namespace std;
#define INF 1e9

struct edge{
    int from,to,cost;
};

int d[505],c[505],n,m;
edge a[10050];

void shortistPath(){
    while(1){
        bool update=false;
        for(int i=0;i<2*m;i++){
            if(d[a[i].from]!=INF && 
              d[a[i].to]>d[a[i].from]+a[i].cost+c[a[i].to]){
                d[a[i].to]=d[a[i].from]+a[i].cost+c[a[i].to];
                update=true;
            }
        }
        if(!update) break;
    }
}

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

    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>c[i];
        d[i]=INF;
    }
    cin>>m;
    for(int i=0;i<m;i++){
        cin>>a[i].from>>a[i].to>>a[i].cost;
        a[m+i].from=a[i].to;
        a[m+i].to=a[i].from;
        a[m+i].cost=a[i].cost;
    }
    d[1]=0;
    shortistPath();
    if(d[n]!=INF){
        cout<<d[n];
    }else{
        cout<<"-1";
    }
    return 0;
}

在 Lubuntu 18.04 上安裝嘸蝦米輸入法

前言

如果您也是合法的使用者,在行易有限公司會員中心裡,就可以找到安裝的說明,也因為這樣,我想說嘗試用影片來呈現安裝過程。

安裝流程

  1. 先安裝 iBus:

    sudo apt-get update
    sudo apt-get install ibus ibus-table
  2. 解壓縮行易有限公司官網上的圖像檔與表格檔,並且放到它們該去的位置:

    tar xvf boshiamy-ibus-1-8-x.tar.gz
    cd boshiamy-ibus-1-8-x/
    sudo mv *.png /usr/share/ibus-table/icons/
    sudo mv *.db /usr/share/ibus-table/tables/
    ibus restart
  3. 我是在 en-us 的環境下,先跑一趟 Preferences → Language Support 去確認 Keyboard Input method system 設定為 iBus。
  4. 再從 iBus Preferences 裡面的 Input Method 頁籤新增輸入法:Chinese – boshiamy-t。

順利的話,就可服用嘸蝦米

C++ APCS實作題 2020/1 4 : 貨物分配

關於樹狀圖的應用

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

int w[2000010]={0},st[10010],child[2000010][2],n,m;

int dfs(int a){
    if(a>=n) return w[a];
    w[a]=dfs(child[a][0])+dfs(child[a][1]);
    return w[a];
}

int findBox(int stw,int a){
    if(a>=n){
        return a;
    }
    if(w[child[a][0]]<=w[child[a][1]]){
        w[child[a][0]]+=stw;
        return findBox(stw,child[a][0]);
    }
    w[child[a][1]]+=stw;
    return findBox(stw,child[a][1]);
}

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

    cin>>n>>m;
    for(int i=0;i<n;i++) cin>>w[n+i];

    for(int i=0;i<m;i++) cin>>st[i];

    for(int i=1;i<n;i++){
        int p,s,t;cin>>p>>s>>t;
        child[p][0]=s;child[p][1]=t;
    }
    int root=1;
    w[1]=dfs(root);
    for(int i=0;i<m;i++){
        cout<<findBox(st[i],root)<<" ";
    } 

    return 0;
}

C++ APCS實作題 2017/10 3 : 樹狀圖分析

樹狀圖的結構以及 DFS ( 深度優先搜索 ) ,另外用了 height[] 來儲存高度以降低複雜度。

#include<bits/stdc++.h>
using namespace std;
#define For(i,a,b) for(int i=(a);i<(b);i++)

long long n;
vector<long long> child[100010];
long long p[100010],height[100010];

void dfs(long long a){
    height[a]=0;
    for(long long v:child[a]){
        dfs(v);
        height[a]=max(height[a],height[v]+1);
    }
    return;
}

int main(){
    cin>>n;
    For(i,1,n+1){
        long long chN;cin>>chN;
        For(j,0,chN){
            long long ch;cin>>ch;
            child[i].push_back(ch);
            p[ch]=i;
        }
    }
    int root;
    for(root=1;root<=n;root++){
        if(p[root]==0) break;
    }
    dfs(root);
    long long total=0;
    for(int i=1;i<=n;i++) total+=height[i];
    cout<<root<<"\n";
    cout<<total<<"\n";
    return 0;
}

修正 ubuntub 20.04 LTS 與 Windows 10 雙系統的時間錯誤

是的,我目前有一部機器,上面跑雙系統,有件事,我有想到,也有注意到,更有被困擾到,就是切換系統時,我總得要重新更新一下系統上面的時間。

系統時間不對,若有不慎,有時會造成一些困擾的,因此,我有兩個選擇,一個就是砍掉其中一個系統,讓機器的運轉單純一點,只是這樣反而會造成其他的麻煩。

另外一個做法,其實就是讓 2 個系統在系統時間上不打架(…這個好像才是比較正常的做法吧!)。

為什麼雙系統會產生這樣的亂象,下面有幾篇文章可以參考:
1.Windows 10 改為使用 UTC 時間_chipo – MdEditor
2.How to Fix Time Differences in Ubuntu 16.04 & Windows 10 Dual Boot | UbuntuHandbook
3.[雙系統]同步 Ubuntu 與 Windows時間 @ 蟲匯聚之所 :: 痞客邦 ::

最後,我選擇從 ubuntu 這邊下手,使用以下指令解決:
sudo apt-get install ntpdate
sudo ntpdate time.windows.com
sudo hwclock –localtime –systohc

在 ubuntu 20.04 安裝官方釋出的嘸蝦米表格檔 (iBus)

前言

今天要分享的流程…

如果您是從官網取得嘸蝦米的 iBus 表格檔,那麼,官網就有安裝流程說明。

這一篇的紀錄,比較屬於按表操課的過程。

安裝過程紀錄

  1. 先到官網下載適用的 Table 檔:IBus (適用於ibus-table 版本 > 1.8.0)。
  2. 透過指令完成安裝。

    
    tar xvf boshiamy-ibus-1-8-x.tar.gz
    cd boshiamy-ibus-1-8-x/
    sudo cp ./*.db /usr/share/ibus-table/tables
    sudo cp ./*.png /usr/share/ibus-table/icons
    ibus-daemon -drx
    
    

    installingUbuntu20.04.3LTSandBoshiamyEp1

  3. 設定嘸蝦米成為預設輸入法(可參考下列影片)。

後記

  1. 貼文更新日期:2022 年 1 月 23 日。
  2. 希望這篇紀錄,有助於蝦米族們,服用嘸蝦米順利、順心!
  3. 以影片的方式紀錄,我還在摸索,若有不足,或是有任何建議,歡迎不吝告知。
  4. 行易有限公司釋出的嘸蝦米官方 iBus 表格,合法授權使用的最佳選擇。

C++ 小發現:cout 遠快於 prinf()

直接附上範例

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

int main(){
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    for(int i=0;i<1e6;i++){
        cout<<i;
    }
}

cout 1.362s 1e5
printf() 6.840s 1e5
cout 3.794s 1e6
printf() 44.907s 1e6

以上為我測試的結果,大家也可以試試看。

C++ APCS 實作題 2020/7 3 : 圓環出口

計算前綴和以及二分搜,以下為程式碼

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

int main(){
    ios::sync_with_stdio(false);

    int n,m;cin>>n>>m;

    int q,pSum[200010];
    cin>>pSum[0];
    for(int i=1;i<n;i++){
        cin>>pSum[i];
        pSum[i]=pSum[i]+pSum[i-1];
    }
    int pos=0;
    for(int i=0;i<m;i++){
        cin>>q;
        if(pos!=0){
            if(q>(pSum[n-1]-pSum[pos-1])){
                q-=(pSum[n-1]-pSum[pos-1]);
                q%=pSum[n-1];
                pos=lower_bound(pSum,pSum+n,q)-pSum+1;
            }else{
                pos=lower_bound(pSum,pSum+n,q+pSum[pos-1])-pSum+1;
            }
        }else{
            q%=pSum[n-1];
            pos=lower_bound(pSum,pSum+n,q)-pSum+1;
        }
        pos%=n;
    }
    cout<<pos;
    return 0;
}