搜狐第2道为什么不对,用一些用例测试是可以过额
Scanner in = new Scanner(System.in);
ArrayList<int[]> list=new ArrayList<int[]>();
while (in.hasNextInt()) {//注意while处理多个case
int count=0;
int[] arr=new int[6];
for(int i=0;i<6;i++){
arr[i]=in.nextInt();
if(arr[i]==0)count++;
}
if(count!=6)list.add(arr);
else
break;
}
for(int i=0;i<list.size();i++){
int count=0;//计数器
int[] arr=list.get(i);
for(int j=5;j>=0;j--){
if(arr[j]==0)continue;
else{
int sum=(j+1)*(j+1)*arr[j];//存放(j+1)*(j+1)的总容量
//需要包裹数
if(sum<36){
count++;
}else if(sum%36==0){//刚好存满容量36
count+=sum/36;
continue;
}
else{
count+=(sum/36+1);
}
int n=sum/36+1;
//max
int max=36/((j+1)*(j+1));
max=arr[j]>max?max:arr[j];//每个36中存放最多(j+1)*(j+1)产品的个数
for(int k=0;k<n;k++){
//leave empty
int dif=36-max*(j+1)*(j+1);//剩余容量
if(j==4||j==5){//1*1
if(arr[0]<=dif)
arr[0]=0;
else{
arr[0]-=dif;
}
}
if(j==3){//2*2 1*1
int s=arr[1]*4;
if(s<=dif){
arr[1]=0;
dif-=s;
if(arr[0]>dif){
arr[0]-=dif;
}else
arr[0]=0;
}else{//put all 2*2
arr[1]-=dif/4;
}
}
if(j==2){//2*2 1*1 almost put 4ge 2*2
if(arr[j]==3){//1
if(arr[1]>0){
arr[1]-=1;
dif-=4;
}
}
if(arr[j]==1){//5
if(arr[1]>4){
arr[1]-=5;
dif-=5*4;
}else{
dif-=arr[1]*4;
arr[1]=0;
}
}
if(arr[j]==2){//3
if(arr[1]>2){
arr[1]-=3;
dif-=12;
}else{
dif-=arr[1]*4;
arr[1]=0;
}
}
if(dif>=arr[0])
arr[0]=0;
else
arr[0]-=dif;
}
if(j==1){//1*1
if(dif>=arr[0])
arr[0]=0;
else
arr[0]-=dif;
}
}
}
}
System.out.println(count);
}
}