zoukankan      html  css  js  c++  java
  • 2011百度之星 个人源码

    A场:求最大分离度

    这道题做错了,3分

    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    int   cmp(   int   arg1,   int   arg2   )   
    {   
    	
    	return   arg1 >  arg2;
    }
    
    int main(int argc, char* argv[])
    {
    	//freopen("i://input.txt","r",stdin);
    	int n,m;
    	int i;
    	scanf("%d %d",&n,&m);
    	int *marr = new int[m];
    	for(i=0;i<m;i++){
    		scanf("%d",&marr[i]);
    	
    	}
    	sort(marr,marr+m,cmp);
    
    	int sum  = 0;
    	int lastIndex = m - 1;
    	int lastRowNum = 0;
    	while(1){
    	
    
    
    	sum  +=(marr[lastIndex]-1)*m*m+lastRowNum*m;
    	lastRowNum = m;
    	
    	for(i = 0;i<=lastIndex;i++){
    		marr[i] -= marr[lastIndex];
    	}
    	while(marr[lastIndex]==0&&lastIndex>=0){m--;lastIndex--;}
    	if(m==0)break;
    
    	}
    	
    	printf("%d\n",sum);
    	
    	delete marr;
    	return 0;
    }

    B场:两道题得12分

    第一题:圆环

    #include <iostream>
    #include <algorithm>
    using namespace std;
    int arr[1001];
    int   cmp(   int   arg1,   int   arg2   )   
    {   
    	
    	return   arg1 >  arg2;
    }
    int qcmp ( const void *a , const void *b )
     {
     return *(int *)a - *(int *)b;
    }
    int next(int curr,int length,int tap){
    	return tap-(length-curr)%tap;
    }
    bool canChangeTo1(int length,int tap){
    
    	int cur =1;
    	for(int i=0;i<tap;i++){
    
    		cur=next(cur,length,tap);
    
    		if(cur==2||cur==tap)
    			return true;
    	}
    	return false;
    }
    int main(int argc, char* argv[])
    {
    	
    	int c;
    	while(1==scanf("%d",&c)&&c){
    		int a,b,i;
    		bool ok = false;
    		bool end = false;
    		scanf("%d%d",&a,&b);
    		int tap = a-b;
    		tap = tap<0?(-tap):tap;
    		if(tap==1){
    		
    			ok = true;
    			end = true;
    		}else{
    			
    			if(canChangeTo1(c,tap)){
    				ok = true;
    				end = true;
    			}
    		}
    		for(i=0;i<c;i++)
    			scanf("%d",arr+i);
    		if(!end){
    			
    			for(i=0;i<tap;i++)
    				qsort(arr+i,(c-i)/tap+1,sizeof(arr[0])*2,qcmp);
    			ok = true;
    			for(i=0;i<c-1;i++)
    				if(arr[i]>arr[i+1]){
    					end = true;
    					ok = false;
    					break;
    				}
    		
    		}
    		printf("%s\n",ok?"Yes":"No");
    	}
    	return 0;
    }

    第三题:全暴力

    #include <iostream>
    #include <math.h>
    #include <algorithm>
    using namespace std;
    int Gcw(int ,int );
    void simply(int *up,int *down)
    {
    	    int gcw = -1;
    	     while( (gcw = Gcw(*up,*down)) != -1 )
    		     {
    		        *up = *up/gcw;
    		        *down = *down/gcw;
    		     }
    }
    
    int Gcw(int u, int v)
    {
    	    if (!(u = u%v))
    		         return v;
    	    if (u == 1)
    		         return -1;
    	    return Gcw(v,u);
    }
    int main(int argc, char* argv[])
    {
    	
    	int t,n;//total , need
    	int i;
    	double maxSatisfy = -1.0;
    	int up,down;
    	scanf("%d%d",&t,&n);
    	int *arr = new int[t];
    	for(i=0;i<t;i++)
    		scanf("%d",arr+i);
    	for(int c = n;c<=t;c++){
    
    		for(int j = 0;j<t;j++){
    
    			if(j+c>t)break;
    			int temp = 0;
    			
    			for(int k=0;k<c;k++)
    			{
    				temp+=arr[k+j];
    			}
    			double newSati = temp/(c*1.0);
    			
    			if(newSati>maxSatisfy){
    				maxSatisfy = newSati;
    				up = temp;
    				down = c;
    			}
    		
    		}
    	}
    	if(up%down == 0)printf("%d\n",up/down);
    	else {
    		simply(&up,&down);
    		printf("%d/%d\n",up,down);
    	}
            delete arr;
    	return 0;
    }
  • 相关阅读:
    Qt之qInstallMessageHandler(重定向至文件)
    linux下MySQL安装及设置
    Apache2 同源策略解决方案
    BSD和云 – 不可错过的BSD聚会
    Nginx转发地址解决跨域问题
    Nginx下css的链接问题
    nginx 基本操作
    Azure 媒体服务可将优质内容传输至 Apple TV
    支付宝接口
    drf过滤组件
  • 原文地址:https://www.cnblogs.com/yangyh/p/2083226.html
Copyright © 2011-2022 走看看