题意:
田忌和齐王各有N匹马,判断怎样比赛,使田忌净胜场数最多。
我感觉这题的精髓就是,不管怎么比赛,都要让田忌的马发挥最大价值。
当然,马的第一要务是用来赢得比赛,而且要最大效益的赢,也就是要赢对方仅次于自己的马。
当他不能完成这个任务的时候就要去输,并拉对方最快的马下水,给自己后面的队友创造更大的胜利机会。
1.慢马可以赢就让它赢,赢不了就拉国王的快马下水
2.慢慢平手,绝对不要以为平手就可以了,因为如果后面的队友可以赢king的这马,自己输和平手结果一样,但是自己还可以拖一匹快马下水(两个标记 一个头 一个尾 分3中情况考虑)
#include<stdio.h> #include<algorithm> using namespace std; int t[1005],k[1005],win,lose; int main() { int n; while(~scanf("%d",&n)) { for(int i=0;i<n;i++) scanf("%d",&t[i]); for(int i=0;i<n;i++) scanf("%d",&k[i]); sort(t,t+n); sort(k,k+n); win=lose=0; int t_slow=0,k_slow=0; int t_quick=n-1,k_quick=n-1; while(t_slow<=t_quick) { if(t[t_slow]>k[k_slow]) //t慢马可以赢king的情况 { { win++; t_slow++; k_slow++; } else if(t[t_slow]<k[k_slow])//慢马pk不应king 那么就让他输 并且拉king的快马下水 { lose++; t_slow++; k_quick--; } else//和的情况 { if(t[t_quick]>k[k_quick])//放水前的决断 { win++; t_quick--; k_quick--; } else { if(t[t_slow]<k[k_quick])//不虚 lose++; t_slow++; k_quick--; } } } printf("%d\n",(win-lose)*200); } return 0; }