• hdu1052 Tian Ji The Horse Racing


    田忌赛马,经典的贪心,不过很难想到呀,每次都用最快跟最快的,最慢的跟最慢的进行比较、判断

    1)若田最快的比王最快的慢,则用最慢的跟王最快的比,输掉一局;反之,则赢了当然是最划算的选择了

    2)若田最慢的比王最慢的还慢,则用最慢的跟王最快的比,输掉一局;反之,同上。

    这俩步是贪心所在;

    还有就是注意想等到情况……

    看代码吧

    #include<stdio.h>
    #include<stdlib.h>
    int cmp(const void *a,const void *b)
    {
    	return *(int*)a-*(int*)b;
    }
    int main()
    {
    	int s[1001],t[1001],n;
    	while(scanf("%d",&n)==1&n!=0)
    	{
    		for(int i=0;i<n;i++)
    			scanf("%d",&s[i]);
    		for(int i=0;i<n;i++)
    			scanf("%d",&t[i]);
    		qsort(s,n,sizeof(s[0]),cmp);//排序,速度慢的在前面
    		qsort(t,n,sizeof(t[0]),cmp);
    		int s1=0,s2=0,e1=n-1,e2=n-1;
    		int sum1=0,sum2=0;
    		while(s1<=e1&&s2<=e2)
    		{
    			if(s[s1]>t[s2])//最慢的马进行比较,
    			{
    				sum1++;s1++;s2++;
    			}
    			else if(s[s1]<t[s2])//若最慢的比王的还慢,则用来跟王的最快比
    			{
    				sum2++;s1++;e2--;
    			}
    			else {
    				if(s[e1]>t[e2])//最快的马进行比较
    				{
    					sum1++;e1--;e2--;
    				}
    				else if(s[e1]<t[e2])//若最快的比王的最快的还慢,则用最慢的更王的最快的比
    				{
    					sum2++;s1++;e2--;
    				}
    				else {
    					if(s[s1]==t[e2])//剩下的马均相等的情况
    						break;
    					else {
    						sum2++;s1++;e2--;
    					}
    				}
    			}
    		
    	   }
    	printf("%d\n",(sum1-sum2)*200);
    }
    return 0;
    }
    
  • 相关阅读:
    Java实现2048小游戏
    归并排序【代码】
    插入排序【代码】
    选择排序【代码】
    考试系统
    九九乘法表
    万年历
    猜数游戏
    C++知识点(杂)
    Core Data ,inverse
  • 原文地址:https://www.cnblogs.com/nanke/p/2118948.html
Copyright © 2020-2023  润新知