#37965: 有資測的資料嗎?我不知道問題出在哪


0523ronli@gmail.com (李士宇)

學校 : 不指定學校
編號 : 166671
來源 : [123.193.166.7]
最後登入時間 :
2023-10-21 10:49:22
c462. apcs 交錯字串 (Alternating Strings) -- apcs | From: [123.193.166.7] | 發表日期 : 2023-10-21 12:10

範例輸入都沒問題,但第一筆測資就錯了,答案是4,我輸出2
字串長度19,k=1,但我想辦法把前12個字元偷出來自己執行就已經得到4了
總不可能max會愈來愈少吧

code:

#include <bits/stdc++.h>
using namespace std;
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    int k;
    string s;
    cin >> k >> s;
    int ans = 0;//答案/k
    bool need = isupper(s[0]);//"預期"的大小寫
    int cnt = k;//還需要符合?個
    int gain = 0;//當下累積交錯字串長度/k
    for (int i = 0; i < s.size(); i++) {
        if (isupper(s[i]) != need) {//與預期不符
            need = isupper(s[i]);
            gain = 0;
            cnt = k;
            for (int j = 1; j < k && i - j >= 0; j++) {//往回尋找符合條件的 (EX:AAA,k=2 讓第3個A準備好切換)
                if (isupper(s[i - j]) == need) {
                    cnt--;
                }
            }
        }
        if (!--cnt) {//切換預期的大小寫並更新答案
            cnt = k; gain++;
            need = !need;
            ans = max(ans, gain);
        }
    }
    cout << ans*k;
}

 
#37972: Re: 有資測的資料嗎?我不知道問題出在哪


liaoweichen1024@gmail.com (M_SQRT)

學校 : 新北市立新莊高級中學
編號 : 195452
來源 : [122.116.111.175]
最後登入時間 :
2024-04-30 21:28:05
c462. apcs 交錯字串 (Alternating Strings) -- apcs | From: [118.150.177.13] | 發表日期 : 2023-10-21 20:09

範例三就錯了啊

 
#38006: Re: 有資測的資料嗎?我不知道問題出在哪


0523ronli@gmail.com (李士宇)

學校 : 不指定學校
編號 : 166671
來源 : [123.193.166.7]
最後登入時間 :
2023-10-21 10:49:22
c462. apcs 交錯字串 (Alternating Strings) -- apcs | From: [223.141.180.225] | 發表日期 : 2023-10-22 18:51

範例三就錯了啊


沒阿,我執行是8沒錯欸

 
#38226: Re: 有資測的資料嗎?我不知道問題出在哪


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [101.136.203.77]
最後登入時間 :
2024-04-07 15:34:14
c462. apcs 交錯字串 (Alternating Strings) -- apcs | From: [101.137.217.207] | 發表日期 : 2023-11-05 16:28


    bool need = isupper(s[0]);//"預期"的大小寫

        if (isupper(s[i]) != need) {//與預期不符


你的程式在不同系統、編譯器上執行的結果會不一樣,所以M_SQRT說的其實也沒錯,在我的電腦上範例三會輸出2。

isupper回傳的類型是int,小寫回傳0,大寫回傳非0的數值。你的need會轉換為bool,之後與isupper(s[i])比較時再轉為int。我的電腦上大寫回傳255,轉為bool再轉int會變成1,再與isupper(s[i])回傳的255比較會變成false,造成錯誤。但我測試其他系統發現它的isupper大寫會回傳1,轉換後數值不變,所以測資三的輸出是正確的。

解決方法:isupper(s[i]) != need改成(bool)isupper(s[i]) != need

 
#38227: Re: 有資測的資料嗎?我不知道問題出在哪


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [101.136.203.77]
最後登入時間 :
2024-04-07 15:34:14
c462. apcs 交錯字串 (Alternating Strings) -- apcs | From: [101.137.217.207] | 發表日期 : 2023-11-05 16:33


    bool need = isupper(s[0]);//"預期"的大小寫

        if (isupper(s[i]) != need) {//與預期不符

我的電腦上大寫回傳255


更正,回傳256,編譯器是g++ 13.2.1與clang 16.0.6

 
ZeroJudge Forum