C
来源:互联网 发布:安卓手机数据导出 编辑:程序博客网 时间:2024/06/03 13:48
题目编号: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;}
0 0