test_one

来源:互联网 发布:笑傲江湖决赛知乎 编辑:程序博客网 时间:2024/06/05 09:19
import java.util.Scanner;
public class ZhenTi1 {
public static int data[];
public static int spot;
public static int min=0x7fffffff;
public static int distance(int door,int doorPeo,int direction){
int distance=0;
int left=door;
int right=door;
if(direction==0){
if(data[door]==0){
 data[door]=-1;
 doorPeo--;
 distance++;
 if(doorPeo==0)
 return distance;
}
left--;
right++;
while(left>=0&&left<spot||right>=0&&right<spot){
 if(left>=0&&left<spot&&data[left]==0) {
 data[left]=-1;
 doorPeo--;
 distance=distance+door-left+1;
 if(doorPeo==0)
 return distance;
 }
 if(right>=0&&right<spot&&data[right]==0) {
 data[right]=-1;
 doorPeo--;
 distance=distance+right-door+1;
 if(doorPeo==0)
 return distance;
 }
 left--;
 right++;
  }
   }else{
    if(data[door]==0){
 data[door]=-1;
 doorPeo--;
 distance++;
 if(doorPeo==0)
 return distance;
}
right++;
left--;
while(left>=0&&left<spot||right>=0&&right<spot){
 if(right>=0&&right<spot&&data[right]==0) {
 data[right]=-1;
 doorPeo--;
 distance=distance+right-door+1;
 if(doorPeo==0)
 return distance;
 }
 if(left>=0&&left<spot&&data[left]==0) {
 data[left]=-1;
 doorPeo--;
 distance=distance+door-left+1;
 if(doorPeo==0)
 return distance;
 }
 right++;
 left--;
  }
   }
return -1;
}
public static void initData(){
for(int i=0;i<spot;i++) data[i]=0;
}
public static int getLong(int doorA,int doorAPeo,int doorB,int doorBPeo,int doorC,int doorCPeo ){
int locMin=0x7fffffff;
int temp=distance(doorA-1,doorAPeo,0)+distance(doorB-1,doorBPeo,0)+distance(doorC-1,doorCPeo,0);
if(locMin>temp) locMin=temp;
initData();
temp=distance(doorA-1,doorAPeo,0)+distance(doorB-1,doorBPeo,0)+distance(doorC-1,doorCPeo,1);
if(locMin>temp) locMin=temp;
initData();
temp=distance(doorA-1,doorAPeo,0)+distance(doorB-1,doorBPeo,1)+distance(doorC-1,doorCPeo,1);
if(locMin>temp) locMin=temp;
initData();
temp=distance(doorA-1,doorAPeo,0)+distance(doorB-1,doorBPeo,1)+distance(doorC-1,doorCPeo,1);
if(locMin>temp) locMin=temp;
initData();
temp=distance(doorA-1,doorAPeo,1)+distance(doorB-1,doorBPeo,0)+distance(doorC-1,doorCPeo,0);
if(locMin>temp) locMin=temp;
initData();
temp=distance(doorA-1,doorAPeo,1)+distance(doorB-1,doorBPeo,0)+distance(doorC-1,doorCPeo,1);
if(locMin>temp) locMin=temp;
initData();
temp=distance(doorA-1,doorAPeo,1)+distance(doorB-1,doorBPeo,1)+distance(doorC-1,doorCPeo,0);
if(locMin>temp) locMin=temp;
initData();
temp=distance(doorA-1,doorAPeo,1)+distance(doorB-1,doorBPeo,1)+distance(doorC-1,doorCPeo,1);
if(locMin>temp) locMin=temp;
initData();
return locMin;
}
    public static void main(String[] args){
    Scanner sc=new Scanner(System.in);
    spot=sc.nextInt();
    data=new int[spot];
    int door0=sc.nextInt();
    int door0_peo=sc.nextInt();
    int door1=sc.nextInt();
    int door1_peo=sc.nextInt();
    int door2=sc.nextInt();
    int door2_peo=sc.nextInt();
    int[] doorA={door0,door0,door1,door2,door1,door2};
    int[] doorB={door1,door2,door0,door0,door2,door1};
    int[] doorC={door2,door1,door2,door1,door0,door0};
    int[] doorAPeo={door0_peo,door0_peo,door1_peo,door2_peo,door1_peo,door2_peo};
    int[] doorBPeo={door1_peo,door2_peo,door0_peo,door0_peo,door2_peo,door1_peo};
    int[] doorCPeo={door2_peo,door1_peo,door2_peo,door1_peo,door0_peo,door0_peo};
    int tempres;
    for(int i=0;i<6;i++){
    tempres=getLong(doorA[i],doorAPeo[i],doorB[i],doorBPeo[i],doorC[i],doorCPeo[i]);
            if(tempres<min) min=tempres;
    }
    System.out.println(min);
    }
}
0 0
原创粉丝点击