#16074: 錯在這三行,不太合理,為什麼?


hshua (hshua)

學校 : 新北市立林口高級中學
編號 : 52506
來源 : [125.228.147.181]
最後登入時間 :
2024-05-19 09:58:00
b158. NOIP2007 1.奖学金 -- NOIP2007普及組 | From: [220.133.124.235] | 發表日期 : 2018-11-17 14:38

#4: 10% WA (line:2)

您的答案為: 19 270
正確答案為: 88 270

#5: 10% WA (line:3)

您的答案為: 5 251
正確答案為: 37 251

#6: 10% WA (line:4)

您的答案為: 143 276
正確答案為: 171 276

//------------------------------------------------------------------
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
struct SUM{
int id, s;
};
SUM sum[350];
//---------------------------------------
bool comp1(SUM a, SUM b){
if(a.s>b.s) return true;
else if (a.s==b.s && a.id<b.id) return true;
else return false;
}
//=======================================
int main() {
while(cin>>n){
memset(sum,0,sizeof(sum));

for(int i=0; i<n; i++) {
int a,b,c;
cin>>a>>b>>c;
sum[i].s=a+b+c;
sum[i].id=i;
}

sort(sum, sum+n, comp1);

for(int i=0; i<n; i++) {
printf("%d %d\n",sum[i].id+1,sum[i].s);
if(i>=4) break;
}
cout<<endl;
}
}

請高手指教



 
#16075: Re:錯在這三行,不太合理,為什麼?


inversion (「我們所認識的可符香是個像天使的好女孩」之葉林 *Cries...)

學校 : 國立清華大學
編號 : 43537
來源 : [49.159.6.107]
最後登入時間 :
2022-05-28 19:29:12
b158. NOIP2007 1.奖学金 -- NOIP2007普及組 | From: [49.158.83.43] | 發表日期 : 2018-11-17 14:49

#4: 10% WA (line:2)

您的答案為: 19 270
正確答案為: 88 270

#5: 10% WA (line:3)

您的答案為: 5 251
正確答案為: 37 251

#6: 10% WA (line:4)

您的答案為: 143 276
正確答案為: 171 276

//------------------------------------------------------------------
#include
#include
#include
using namespace std;
int n;
struct SUM{
int id, s;
};
SUM sum[350];
//---------------------------------------
bool comp1(SUM a, SUM b){
if(a.s>b.s) return true;
else if (a.s==b.s && a.id<b.id) return true;
else return false;
}
//=======================================
int main() {
while(cin>>n){
memset(sum,0,sizeof(sum));

for(int i=0; i<n; i++) {
int a,b,c;
cin>>a>>b>>c;
sum[i].s=a+b+c;
sum[i].id=i;
}

sort(sum, sum+n, comp1);

for(int i=0; i<n; i++) {
printf("%d %d\n",sum[i].id+1,sum[i].s);
if(i>=4) break;
}
cout<<endl;
}
}

請高手指教



據本人的臆測,您少考慮了總分同分的狀況。

 

當同分的時候,根據題目的敘述,應當要按照語文的成績由高排到低。

 

而如果語文也同分,則就按照學號由小排到大。

 

然而您的程式碼是直接排總分,再來學號。並沒有考慮進以上的語文分數。

 

例如:

5

1 2 3

2 3 1

2 1 3

1 1 1

1 1 1

 

您的程式碼應該會輸出以下:

1 6

2 6

3 6

4 3

5 3

 

但是實際的結果應為:

2 6

3 6

1 6

4 3

5 3

因為,學號 2 、 3 的總分 = 學號 1 的總分,但是學號 2 、 3 的語文分數比學號 1 的高。因此排在學號 1 的前面。

而學號 2 、 3 的總分相同,語文分數也一樣。因此按照學號大小由小排到大。

 

以上,希望有幫助到您。

 
#16076: Re:錯在這三行,不太合理,為什麼?


hshua (hshua)

學校 : 新北市立林口高級中學
編號 : 52506
來源 : [125.228.147.181]
最後登入時間 :
2024-05-19 09:58:00
b158. NOIP2007 1.奖学金 -- NOIP2007普及組 | From: [220.133.124.236] | 發表日期 : 2018-11-17 15:16

#4: 10% WA (line:2)

您的答案為: 19 270
正確答案為: 88 270

#5: 10% WA (line:3)

您的答案為: 5 251
正確答案為: 37 251

#6: 10% WA (line:4)

您的答案為: 143 276
正確答案為: 171 276

//------------------------------------------------------------------
#include
#include
#include
using namespace std;
int n;
struct SUM{
int id, s;
};
SUM sum[350];
//---------------------------------------
bool comp1(SUM a, SUM b){
if(a.s>b.s) return true;
else if (a.s==b.s && a.id<b.id) return true;
else return false;
}
//=======================================
int main() {
while(cin>>n){
memset(sum,0,sizeof(sum));

for(int i=0; i<n; i++) {
int a,b,c;
cin>>a>>b>>c;
sum[i].s=a+b+c;
sum[i].id=i;
}

sort(sum, sum+n, comp1);

for(int i=0; i<n; i++) {
printf("%d %d\n",sum[i].id+1,sum[i].s);
if(i>=4) break;
}
cout<<endl;
}
}

請高手指教



據本人的臆測,您少考慮了總分同分的狀況。

 

當同分的時候,根據題目的敘述,應當要按照語文的成績由高排到低。

 

而如果語文也同分,則就按照學號由小排到大。

 

然而您的程式碼是直接排總分,再來學號。並沒有考慮進以上的語文分數。

 

例如:

5

1 2 3

2 3 1

2 1 3

1 1 1

1 1 1

 

您的程式碼應該會輸出以下:

1 6

2 6

3 6

4 3

5 3

 

但是實際的結果應為:

2 6

3 6

1 6

4 3

5 3

因為,學號 2 、 3 的總分 = 學號 1 的總分,但是學號 2 、 3 的語文分數比學號 1 的高。因此排在學號 1 的前面。

而學號 2 、 3 的總分相同,語文分數也一樣。因此按照學號大小由小排到大。

 

以上,希望有幫助到您。

OK 感謝!!!


 
ZeroJudge Forum