题意:船载车过河,车有长度,船也有长度,给出每辆车来的顺序以及到达的岸,问最少渡几次。
题解:贪心,能装多少装多少,每次都尽可能多装。
View Code
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<list> 5 using namespace std; 6 list<int> ql,qr; 7 int main() 8 { 9 int T; 10 for(scanf("%d",&T);T;T--) 11 { 12 int len,n,x,y,cnt1,cnt2; 13 char s[10]; 14 scanf("%d%d",&len,&n); 15 len*=100; 16 ql.clear(); 17 qr.clear(); 18 while(n--) 19 { 20 scanf("%d%s",&x,&s); 21 if(s[0]=='l') 22 ql.push_back(x); 23 else 24 qr.push_back(x); 25 } 26 cnt1=cnt2=0; 27 while(!ql.empty()) 28 { 29 x=len; 30 y=ql.front(); 31 while(x-y>0&&!ql.empty()) 32 { 33 ql.pop_front(); 34 x-=y; 35 y=ql.front(); 36 } 37 cnt1++; 38 } 39 while(!qr.empty()) 40 { 41 x=len; 42 y=qr.front(); 43 while(x-y>0&&!qr.empty()) 44 { 45 qr.pop_front(); 46 x-=y; 47 y=qr.front(); 48 } 49 cnt2++; 50 } 51 if(cnt1==cnt2) 52 cnt1+=cnt2; 53 else if(cnt1>cnt2) 54 cnt1=cnt1*2-1; 55 else 56 cnt1=cnt2*2; 57 printf("%d\n",cnt1); 58 } 59 return 0; 60 }