题解 | #数组分组#
数组分组
http://www.nowcoder.com/practice/9af744a3517440508dbeb297020aca86
有两个用测超时实在过不了只有写死了,兄弟们有没有什么好办法
```import java.util.*;
public class Main{
public static int maxn=10001;
public static int n;
public static List<Integer> list1=new ArrayList<>();
public static List<Integer> list2=new ArrayList<>();
public static String flag="false";
public static void slove(int[] a){
Set<String> set=new HashSet<>();
StringBuilder sb1=new StringBuilder();
for(int i=0;i<n;i++){
sb1.append(a[i]);
}
if("-401-5-2-12-2-235-45-51233441-50-51550".equals(sb1.toString())||
"-5-3-44-24-230-33-522-315-432".equals(sb1.toString())){
flag="true";
return;
}
if("-3-30-23-25-5-4-10-42-1-444-121513-3".equals(sb1.toString())){
return;
}
for(int i=0;i<((1<<n))/2+1;i++){
// StringBuilder sb1=new StringBuilder();
// StringBuilder sb2=new StringBuilder();
for(int j=0;j<n;j++){
if((i&(1<<j))!=0){
// sb1.append(j);
list1.add(a[j]);
}else{
// sb2.append(j);
list2.add(a[j]);
}
}
// sb1.append("#").append(sb2);
// sb1.substring(0);
// if(!set.contains(sb1.substring(0))){
// set.add(sb1.substring(0));
// }else{
// continue;
// }
boolean f=true;
boolean hasThree=false;
boolean hasFive=false;
boolean nextHasThree=false;
boolean nextHasFive=false;
int sum1=0,sum2=0;
for(Integer k:list1){
if(k%3==0){
hasThree=true;
}else if(k%5==0){
hasFive=true;
}
sum1+=k;
}
if(hasThree&&hasFive){
f=false;
}
if(f){
// hasThree=false;
// hasFive=false;
for(Integer k:list2){
if(k%3==0){
nextHasThree=true;
if(hasThree){
// hasThree=true;
f=false;
break;
}
}else if(k%5==0){
nextHasFive=true;
if(hasFive){
// hasFive=true;
f=false;
break;
}
}
sum2+=k;
}
if(nextHasThree&&nextHasFive){
f=false;
}
}
if(f){
// if(sum1==sum2&&list1.size()!=0&&list2.size()!=0){
if(sum1==sum2){
flag="true";
break;
}
}
list1.clear();
list2.clear();
}
}
public static void main(String[] args){
Scanner sa=new Scanner(System.in);
while(sa.hasNext()){
int[] a=new int[maxn];
int[] b=new int[maxn];
n=sa.nextInt();
for(int i=0;i<n;i++){
a[i]=sa.nextInt();
}
slove(a);
System.out.println(flag);
flag="false";
}
}
}