贪心算法1002
题目大意:
田忌赛马。。。。若干匹马与国王的马比赛,每有一匹马大于国王的速度,赢得200,否则输200,速度相同不计,输入n为马的数目,0为结束
解题思路:
先排序,将两个速度最快的比较,如果大于国王,m++,如果小于,将最慢的与国王最快的比较,m--。如果等于,将两个最慢的比较,如果大于国王最慢的,m++,如果小于,与国王最快的比较m--,如果等于,将最慢的与国王最快的比较,m--;
代码:
#include <iostream> #include <algorithm> using namespace std; int main() { int n,i,m=0,a[1001],b[1001]; while(cin>>n) { if(n==0) return 0; for(i=0;i<n;i++) cin>>a[i]; for(i=0;i<n;i++) cin>>b[i]; sort(a,a+n); sort(b,b+n); int l1=0,l2=0;int h1=n-1,h2=n-1; for(i=0;i<n;i++) { if(a[h1]>b[h2]) { m++; h1--; h2--; continue; } if(a[h1]<b[h2]) { m--; h2--; l1++; continue; } if(a[h1]==b[h2]) { if(a[l1]<b[l2]) { l1++; h2--; m--; continue; } if(a[l1]>b[l2]) { l1++; l2++; m++; continue; } if(a[l1]==b[l2]) { if(a[l1]<b[h2]) { m--; h2--; l1++; } } } } cout<<m*200<<endl; m=0; } return 0; }