HDU 1052
绝好的贪心题
把马按照从大到小排序。
若田忌的快马比王的快马快,直接赢
若田忌的快马比王的快马慢,则用最慢的马和王比
若快马相等,则转向慢马。若田忌的慢马比王的慢马快,则赢,指针移位。否则,比较田忌的慢马与王的快马,若相等,直接和。否则,让慢马输给王的快马(只有这种情况)
想想,应该是按上面的解答的。这题的贪心真不好想。。。看来自己还有距离。
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 using namespace std; 5 6 const int MAX=1010; 7 8 int tian[MAX],king[MAX]; 9 10 bool cmp(int a,int b){ 11 if(a>b) return true; 12 return false; 13 } 14 15 int main(){ 16 int n,cnt,unt; 17 while(scanf("%d",&n),n){ 18 cnt=unt=0; 19 for(int i=0;i<n;i++) 20 scanf("%d",&tian[i]); 21 for(int i=0;i<n;i++) 22 scanf("%d",&king[i]); 23 sort(tian,tian+n,cmp); 24 sort(king,king+n,cmp); 25 int front=0;int head=0; 26 int rear=n-1;int last=n-1; 27 while(front<=rear){ 28 if(tian[front]>king[head]){ 29 head++; front++; 30 cnt++; 31 } 32 else if(tian[front]<king[head]){ 33 unt++; 34 head++; rear--; 35 } 36 else { 37 if(tian[rear]>king[last]){ 38 cnt++; 39 rear--; last--; 40 } 41 else if(tian[rear]==king[head]){ 42 rear--; head++; 43 } 44 else{ 45 unt++; 46 rear--; head++; 47 } 48 } 49 } 50 printf("%d\n",(cnt-unt)*200); 51 } 52 return 0; 53 }