[ACM] 10032 Tugs of war
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
( 未必需要依照此格式,文章條理清楚即可 )
題號: ACM 10032
遇到的問題: WA
有問題的code:
#include<stdio.h>
#include<stdlib.h>
int main(void){
int case_num;
int p[100];
int i,j,k;
int p_num;
int temp;
int team_a,team_b; /* 兩個 team 目前的體重和*/
int c_a,c_b; /* 兩個 team的人數 */
scanf("%d",&case_num);
for ( i = 0 ; i < case_num ; i ++ ){
scanf("%d",&p_num);
for ( j = 0 ; j < p_num ; j ++ ){
scanf("%d",&p[j]);
}
for ( j = 0 ; j < p_num ; j++ ){
for ( k = j+1 ; k < p_num ; k++ ){
if ( p[k] < p[j] ) {
temp = p[j];
p[j] = p[k];
p[k] = temp;
}
}
}/* sort */
team_a = 0;
team_b = 0;
c_a = 0;
c_b = 0;
j = 0 ;
k = p_num-1;
while ( j <= k ){
if ( c_a == 0 && c_b == 0 ){
team_a += p[k--];
team_b += p[k--];
c_a++;
c_b++;
}
else if ( team_b > team_a && c_b > c_a ){
team_a += p[k--];
c_a++;
}
else if ( team_b > team_a && c_b < c_a ){
team_b += p[j++];
c_a++;
}
else if ( team_b > team_a && ( c_a == c_b ) ){
team_a += p[k--];
c_a++;
}
else if ( team_a > team_b && ( c_a > c_b ) ){
team_b += p[k--];
c_b++;
}
else if ( team_a > team_b && ( c_a < c_b ) ){
team_a += p[j++];
c_a++;
}
else if ( team_a > team_b && ( c_a == c_b ) ){
team_b += p[k--];
c_b++;
}
else if ( team_a == team_b && ( c_a == c_b ) ) {
team_b += p[j++];
c_b++;
}
else if ( team_a == team_b && ( c_a < c_b ) ){
team_a += p[j++];
c_a++;
}
else {
team_b += p[j++];
c_b++;
}
}
if ( team_a > team_b )printf("%d %d\n\n",team_b,team_a);
else printf("%d %d\n\n",team_a,team_b);
}
return 0;
}
補充說明:
測了sample input 和自己想的測資都會對
但是放上去還是錯了
有爬文看板上之前也有一篇10032的解法 但是還是想知道我的解法為什麼錯了
我的想法是 一開始拿到資料後 先sort 然後把最大的兩個先分別塞給
team_a team_b 接下來每跑一次迴圈 就看team_a team_b 哪個大
以及目前的人數狀態 決定給大的值 或小的值 以及給哪個team
希望板上的高手可以幫我看一下 非常感激:)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.169.217.179
推
08/14 03:05, , 1F
08/14 03:05, 1F
→
08/14 03:06, , 2F
08/14 03:06, 2F
→
08/14 03:06, , 3F
08/14 03:06, 3F
→
08/14 10:23, , 4F
08/14 10:23, 4F
→
08/14 12:21, , 5F
08/14 12:21, 5F
→
08/14 12:23, , 6F
08/14 12:23, 6F