题目编号:C
题目大意:田忌赛马。输入两个数组,第一个是田忌的马的速度,第二个是齐威王的马的速度。两人赛马,田赢一局得200分,输抠200,平没分,求田忌最多的分数。
解题思路:从田的第一个开始排查对齐,遇到比齐大的,比;遇到比齐小的,用田最弱的来比,输扣200;遇到平的有这 样几中可能:首先,比较田最慢的和齐的最慢的,如果比大,则比赢200,否则田最慢比齐这个快的慢和相当,都比,平或扣200,循环即可。虽然难理解,但漏洞很 少,修改次数不是很多,很容易观察。
题后感想:做题还是前两天做的,一直没有时间写论文。上面有种方法是其他同学想到的,有漏洞问的我,我仔细查了才弄出来,不过思想都很不错。继续努力!
#include<iostream>
#include<algorithm>
using namespace std;
int arr[1001],brr[1001];
bool cmp(int a,int b)
{
return a>b;
};
int main()
{
int s,n,a,b,c,d;
int i,j,k;
while(cin>>n&&n>0)
{
for(i=0;i<n;i++)
{
cin>>arr[i];
}
for(i=0;i<n;i++)
{
cin>>brr[i];
}
sort(arr,arr+n,cmp);
sort(brr,brr+n,cmp);
s=0;
a=c=0;
b=d=n-1;
for(i=0;i<n;i++)
{
if(arr[a]>brr[c])
{
s+=200;
a++;
c++;
continue;
}
else if(arr[a]==brr[c])
{
if(arr[b]>brr[d])
{
b--;
d--;
s+=200;
continue;
}
if(arr[b]<brr[c])
{
b--;
c++;
s-=200;
continue;
}
else
{
b--;
c++;
continue;
}
}
else
{
b--;
c++;
s-=200;
continue;
}
}
cout<<s<<endl;
}
return 0;
}