|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
田忌赛马
输入
输入最多包含 50 个测试用例。每种情况都以第一行的正整数 n (n <= 1000) 开头,这是每边的马数。第二行接下来的n个整数是田氏马的速度。然后第三行的下一个n个整数是国王马的速度。输入以一行结尾,该行在最后一个测试用例之后具有单个 0。
输出
对于每个输入案例,输出一行包含单个数字,每赢一场得200银元。这是田机将获得的最大金额,以银元为单位。
示例输入
3
92 83 71
95 87 74
2
20 20
20 20
2
20 19
22 18
0
示例输出
200
0
0
- #include "stdio.h"
- #include <stdlib.h>
- int compare(const void *b, const void *a)
- {
- return *(int*)a - *(int*)b;
- }
- int main()
- {
- int c,i,win,ave,j,temp,tj[1001]={0},gw[1001]={0},k;
- while(scanf("%d",&c)&&c!=0)
- {
- for(i=0;i<c;i++)
- {
- scanf("%d",&tj[i]);
- }
- for(i=0;i<c;i++)
- {
- scanf("%d",&gw[i]);
- }
- qsort(tj, c, sizeof(int), compare);//田忌的马降序
- qsort(gw, c, sizeof(int), compare);//国王的马降序
- win=0;//胜场数
- ave=0;//平局数
- temp=-1; //king的马从temp开始, 之前的马速都大于田忌剩余马中速度最大的
- for(i=0;i<c;i++)//遍历田忌的马
- {
- for(j=temp+1;j<c;j++)//每次必定比掉一场
- {
- if(tj[i] > gw[j]) //tj的马若遇到比他小的最大值则直接比掉
- {
- win++;
- temp=j;
- break;
- }
- else if(tj[i] == gw[j]) //势均力敌
- {
- for(k=j+1;k<c;k++)
- {
- if(tj[i] > gw[k]) break;
- }
- if(k!=c) //平局之后还有比tj小的马
- {
- win++;
- temp=k;
- }
- else //平局之后全部等于tj速度最大的马
- {
- ave++;
- temp=j;
- }
- break;
- }
- }
- if(j==c) //已经比到国王的最慢的马了
- {
- break;
- }
- }
- printf("%d\n",(2*win-c+ave)*200);//赢的场数-输的场数
- }
- return 0;
- }
复制代码
不知为何,总有几个测试点过不去,望大佬指点 |
|