#25198: c++ 想請問為什麼NA??


morris20031031@gmail.com (damn91)

學校 : 國立臺中第一高級中學
編號 : 147796
來源 : [36.238.200.28]
最後登入時間 :
2024-06-18 17:55:38
f072. 3. 家裡的後花園 (Garden) -- 2020年5月TOI練習賽新手組 | From: [42.76.53.19] | 發表日期 : 2021-04-28 10:24

  • #include <iostream>
  • using namespace std;

 

 

int main() {

    int n,r,l,ans=0;

    cin >> n;

    int a[n];

    for(int i=0; i<n; i++) {

        cin >> a[i];

        if(a[i] == 0) {

            a[i] = 2;

        }

    }

    for(int i=0; i<n; i++) {

        if(a[i] == 1) {

            l = i;

            break;

        }

    }

    for(int i=n; i>0; i--) {

        if(a[i] == 1) {

            r = i;

            break;

        }

    }

    for(int i=0; i<l; i++) {

        a[i] = 0;

    }

    for(int i=n; i>r; i--) {

        a[i] = 0;

    }

    for(int i=0; i<n; i++) {

        if(a[i] == 9){

            a[i-1] = 0;

            a[i+1] = 0;

        }

    }

    for(int i=0; i<n; i++) {

        if(a[i] == 2){

            ans++;

        }

    }

    cout << ans;

    cout << endl;

    return 0;

}

 
#25986: Re:c++ 想請問為什麼NA??


vic20050418@gmail.com (Wen Vic)

學校 : 國立臺灣科技大學
編號 : 153262
來源 : [114.136.159.95]
最後登入時間 :
2023-07-29 13:10:41
f072. 3. 家裡的後花園 (Garden) -- 2020年5月TOI練習賽新手組 | From: [114.136.189.236] | 發表日期 : 2021-07-09 16:32

第一個迴圈 不用把0變成2...別幹傻事

for(int i=0; i<n; i++) {

        cin >> a[i];

        if(a[i] == 0) {

            a[i] = 2;

        }

    }

你後面兩個for不就在search left and right

後面for直接從left做到right就好啊 還可以少跑迴圈

所以有兩個for根本就可以刪掉了

再來錯誤的地方是出在

for(int i=0; i<n; i++) {

        if(a[i] == 9){

            a[i-1] = 0;

            a[i+1] = 0;

        }

    }

假如 1 0 9 9 0 1

你判斷到第一個9 會把第二個9吃掉 第二個9旁邊的0還會存在

所以就錯了...

 
ZeroJudge Forum