• PKU1179多边形游戏


    /*多边形游戏*/
    #include<stdio.h>
    
    void MinMax(int n,int i,int s,int j,__int64& minf,__int64& maxf,__int64 m[101][101][2],char b[101]);
    __int64 PolyMax(int n,__int64 m[101][101][2],char b[101]);
    
    int main(){
    	
    	int a[101];
    	char b[101];
    	
    	int n;
    	while(scanf("%d",&n)!=EOF){
    		for(int i=1;i<=n;i++){
    			getchar();
    			scanf("%c",&b[i]);
    			scanf("%d",&a[i]);
    			
    		}
    
    		__int64 m[101][101][2]={0};
    		for(int ii=1;ii<=n;ii++){
    			m[ii][1][0]=m[ii][1][1]=a[ii];
    		}
    		__int64 sum=PolyMax(n,m,b);
    		printf("%I64d\n",sum);
    		for(int kk=0,jj=1;jj<=n;jj++){
    			if(sum==m[jj][n][1]){
    				if(kk!=0)
    					putchar(' ');
    				printf("%d",jj);
    				kk=1;
    			}
    		}
    		putchar('\n');
    
    	}
    	return 0;
    }
    
    __int64 PolyMax(int n,__int64 m[101][101][2],char b[101]){
    	
    	__int64 minf,maxf;
    	for(int j=2;j<=n;j++){
    		for(int  i=1;i<=n;i++){
    			for(int k=1;k<j;k++){
    				MinMax(n,i,k,j,minf,maxf,m,b);
    				if(k==1){
    					m[i][j][0]=minf;
    					m[i][j][1]=maxf;
    					continue;
    				}
    				if(m[i][j][0]>minf)m[i][j][0]=minf;
    				if(m[i][j][1]<maxf)m[i][j][1]=maxf;
    			}
    		}
    	}
    
    	__int64 temp = m[1][n][1];
    	for(int i=2;i<=n;i++){
    		if(temp<m[i][n][1]){
    			temp=m[i][n][1];
    		}
    	}
    	return temp;
    
    }
    
    void MinMax(int n,int i,int s,int j,__int64& minf,__int64& maxf,__int64 m[101][101][2],char op[101]){
    	
    	minf = 0x7fffffff;
    	maxf = -0x7fffffff;
    	__int64 e[4];
    	__int64 a=m[i][s][0],b=m[i][s][1],r=(i+s-1)%n+1;
    	__int64 c=m[r][j-s][0],d=m[r][j-s][1];
    	if(op[r] == 't'){
    		minf=a+c;
    		maxf=b+d;
    	}
    	else{
    		e[0]=a*c;
    		e[1]=a*d;
    		e[2]=b*c;
    		e[3]=b*d;
    		minf=e[0];
    		maxf=e[0];
    		for(int r=1;r<4;r++){
    			if(minf>e[r])
    				minf=e[r];
    			if(maxf<e[r])
    				maxf=e[r];
    		}
    	}
    
    }
  • 相关阅读:
    Linux(Unix)时钟同步ntpd服务配置方法(转载)
    Linux SSH Publickey登录!
    三个最短路算法
    三个最短路算法
    最大子列和问题
    哈密尔顿环
    最小生成树应用解(超时)蓝桥杯2015初赛]灾后重建
    最小生成树应用解(超时)蓝桥杯2015初赛]灾后重建
    c++11的记录
    最大子列和问题
  • 原文地址:https://www.cnblogs.com/Acmen/p/2246913.html
Copyright © 2020-2023  润新知