Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

1485题 Runtime error 用dev c++可以啊,请大家帮忙看一下,多谢!

Posted by GaryLiang at 2009-07-30 11:12:29
#include <iostream>
#include <cstring>
#include <string>
#include <vector>
#include <stdio.h>
#include <sstream>
#include "math.h"
using namespace std;

int count=0;
class MaxMin{
  public:
	   int pos;
     int max;
     int min;
};
void Make2DArray(int * * &x,int rows,int cols){
		 x=new int*[rows];
		 for(int i=0;i<rows;i++)
		      x[i]=new int[cols];
}
void Delete2DArray(int * * x,int rows){
		 for(int i=0;i<rows;i++)
		      delete []x[i];
     delete []x;
}

void Combine(int *num,int * flag,int ** &result,int n,int k,int bn,int t){
		 
		 
		 if(t==0){
			   int temp=0;
		     for(int i=0;i<n;i++){
		         if(flag[i]==1){
		            result[::count][temp]=num[i];
								++temp; 
								if(temp==3){
								  break;
								}
						 }
				 }
				 ++(::count);
				 return;  	
		 }
		 if(bn>=n)
		    return;
		 flag[bn]=1;
		 Combine(num,flag,result,n,k,bn+1,t-1);
		 flag[bn]=0;
		 Combine(num,flag,result,n,k,bn+1,t);
}

int main(){
		int n;
		int k;
	  int ct=1;
	  vector<string> rt;
	  
	  
	  
    while((cin>>n)&&(cin>>k)){
			   vector<MaxMin>  trt;
 				 if((n==0)||(k==0))
				    break;
		     int dis=0;
         int * num=new int[n+1];
         int * flag=new int[n+1];
 	       int total;
         int index=0;
 	       ::count=0;
         int temp1=n;
         int temp2=k;
         int rt1=1,rt2=1; 
         for(int i=0;i<k;i++){
	            rt1*=temp1;
	            rt2*=temp2;
	            --temp1;
	            --temp2;
				 }
				 total=rt1/rt2;
				 int **result;
				 Make2DArray(result,total,k);
				 for(int i=0;i<total;i++){
				   for(int j=0;j<k;j++)
				     result[i][j]=0;
				 }
         for(int i=0;i<n;i++){
	            cin>>num[i];
	            flag[i]=0;
				 }
				 Combine(num,flag,result,n,k,0,k);
			   
			   for(int i=0;i<total;i++){
            
 				     int tempdis=0;   
						 for(int j=0;j<n;j++){
						   int tdis=abs(num[j]-result[i][0]);
						   for(int w=1;w<k;w++){
			 				    int d=abs(num[j]-result[i][w]);
			 				    if(tdis>d)
			 				       tdis=d;
							 }
							 tempdis+=tdis;
						}
						if(i==0){
						   dis=tempdis;
						   
						}
						else{
					     if(dis>tempdis){
					        dis=tempdis;
					        index=i;
									}
						}
		     }
		    
		     for(int i=0;i<k;i++){
	 			   MaxMin mm;
					 mm.min=7;
					 mm.max=0;
					 trt.push_back(mm);	 
				}
		     for(int i=0;i<n;i++){
	 				  int inx=0;
			      int td=abs(num[i]-result[index][0]);
			      for(int j=1;j<k;j++){
						   int ttd=abs(num[i]-result[index][j]);
						   if(td>ttd){
                   td=ttd;
									 inx=j;  
							 }
						}
					
						if((i+1)<trt[inx].min){
					    trt[inx].min=i+1;
						}
						if((i+1)>trt[inx].max){
	            trt[inx].max=i+1;
						}
					  
				 }
				 for(int u=0;u<k;u++){
				    for(int v=0;v<n;v++){
					     if(num[v]==result[index][u]){
							     trt[u].pos=v+1;	   
					     }
						}
				 }
				 
				 stringstream ss;
		     Delete2DArray(result,total);
		     delete []num;
		     delete []flag;
		     num=0;
		     flag=0;
		     string str="Chain ";
		     
		     ss<<ct;
		     str+=ss.str();
		     ss.str("");
		     str+="\n";
		     for(int i=0;i<k;i++){
				   str+="Depot ";
				   
				   ss<<i+1;
				   str+=ss.str();
				   ss.str("");
				   str+=" at restaurant ";
				   ss<<trt[i].pos;
			     ss.str("");
				   str+=ss.str();
				   str+=" serves restaurants ";
				   if(trt[i].min!=trt[i].max){
					 	 ss<<trt[i].min;													
					   str+=ss.str();
				     ss.str("");
					   str+=" to ";
					   ss<<trt[i].max;
					   str+=ss.str();
				     ss.str("");
					   str+="\n";
					 }
					 else{
		 			    ss<<trt[i].min;
		 			    str+=ss.str();
	 			      ss.str("");
		 			    str+="\n";
						}
				 }
				 
				 str+="Total distance sum = ";
				 ss<<dis;
				 str+=ss.str();
				 str+="\n";
				 ss.str("");
				 
				 str+="\n";
				 rt.push_back(str);
		  
		     ++ct;
		     
				 
		    
				 
		     
		     
		     
		     
				
			
		
			
		
		}
		for(int i=0;i<rt.size();i++){
		  cout<<rt[i];
		}
  
	}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator