#37353: c++解 (測資很賤)


jerry960216@gmail.com (丁宥竣(丁哥))

學校 : 高雄市立中正高級中學
編號 : 233225
來源 : [1.175.210.208]
最後登入時間 :
2024-06-15 14:09:54
f071. 2. 刮刮樂 (Lottery) -- 2020年5月TOI練習賽新手組 | From: [36.238.57.24] | 發表日期 : 2023-09-03 11:30

測資裡有出現幸運數字第1或2和第3個相同的狀況

所以除了不加不減外也不能乘2

    long n1,n2,n3,arr[5],mon[5],sum=0,s=0;
    cin>>n1>>n2>>n3>>arr[0]>>arr[1]>>arr[2]>>arr[3]>>arr[4]>>mon[0]>>mon[1]>>mon[2]>>mon[3]>>mon[4];
    for(int i=0;i<5;i++)
    {
        if(arr[i]==n1||arr[i]==n2)
            sum+=mon[i];
        if(arr[i]==n3)//這裡不能用else if 因為會有第1或2和第3個相同的狀況
            sum=sum-mon[i],s++;
    }
    if(s==0)
        sum=sum*2;
    if(sum<0)
        sum=0;
    cout<<sum;

 
#39925: Re: c++解 (測資很賤)


dreamer.aeu65@gmail.com (Noah)

學校 : 國立清華大學
編號 : 173796
來源 : [140.114.216.100]
最後登入時間 :
2024-06-06 01:14:16
f071. 2. 刮刮樂 (Lottery) -- 2020年5月TOI練習賽新手組 | From: [140.114.216.100] | 發表日期 : 2024-04-12 23:23

測資裡有出現幸運數字第1或2和第3個相同的狀況

所以除了不加不減外也不能乘2

    for(int i=0;i<5;i++)
    {
        if(arr[i]==n1||arr[i]==n2)
            sum+=mon[i];
        if(arr[i]==n3)//這裡不能用else if 因為會有第1或2和第3個相同的狀況
            sum=sum-mon[i],s++;
    }

感謝解題報告!

但這裡提醒一下,你的程式碼是對的,但文字描述有誤。

因為幸運數字a、b和c重複的情況有兩種

 

第一種是a或b「其一」等於c,但a不等於b

若此號碼出現在號碼區,

則獎金會先加一次(因為a、b其一出現在號碼區),再減一次(因為c出現在號碼區),

因此才會像是不加不減。

 

第二種是a或b「皆」等於c

若此號碼出現在號碼區,

則獎金會先加兩次(因為a、b皆出現在號碼區),再減一次(因為c出現在號碼區),

總共會加一次獎金。

 

你的程式碼兩種情況都能適用,因此可以AC。

但文字敘述中的「不加不減」只適用於第一種,可能會讓人誤會😅

應該說「考量a、b可能和c相同,a、b的判斷和c的判斷各自進行」會比較好~

 
ZeroJudge Forum