## Thursday, December 12, 2013

Problem is

### Problem Statement

Fox Ciel has some items. The weight of the i-th (0-based) item is item[i]. She wants to put all items into bins.

The capacity of each bin is 300. She can put an arbitrary number of items into a single bin, but the total weight of items in a bin must be less than or equal to 300.

You are given the int[] item. It is known that the weight of each item is between 101 and 300, inclusive. Return the minimal number of bins required to store all items.

### Definition

 Class: BinPackingEasy Method: minBins Parameters: int[] Returns: int Method signature: int minBins(int[] item) (be sure your method is public)

### Limits

 Time limit (s): 2 Memory limit (MB): 64

### Constraints

- item will contain between 1 and 50 elements, inclusive.
- Each element of item will be between 101 and 300, inclusive.

### Examples

0)

 `{150, 150, 150, 150, 150}`
`Returns: 3`
 You have five items and each bin can hold at most two of them. You need at least three bins.
1)

 `{130, 140, 150, 160}`
`Returns: 2`
 For example, you can distribute the items in the following way: Bin 1: 130, 150 Bin 2: 140, 160
2)

 `{101, 101, 101, 101, 101, 101, 101, 101, 101}`
`Returns: 5`
3)

 `{101, 200, 101, 101, 101, 101, 200, 101, 200}`
`Returns: 6`
4)

 `{123, 145, 167, 213, 245, 267, 289, 132, 154, 176, 198}`
`Returns: 8`

and My Code is blow

public static int minBins2(int[] items){
Arrays.sort(items);

int sp = 0;
int ep = Math.max(items.length -1, 0);

int totalNum =0;
while(true){
if(items[ep] > 199){
totalNum ++;
ep--;
}else{
break;
}
}

while(ep >= sp){
if(items[ep] + items[sp] <= 300){
sp++;
}
ep--;
totalNum++;
}

}

## Access Step ##

1. Sort Items
2. if items are bigger than 199 add totalNum
3. sum of first item and last item are bigger than 300
last index -- and totalnum ++
.......

i think this is very easy

The Question is

### Problem Statement

Fox Ciel received a string as a birthday present. However, the string was too long for her, so she decided to make it shorter by erasing some characters.

The erasing process will look as follows:
1. Find the smallest i such that the i-th character and the (i+1)-th character of the string are same.
2. If there is no such i, end the process.
3. Remove the i-th and the (i+1)-th character of the string, and repeat from 1.

For example, if she receives "cieeilll", she will change the string as follows: "cieeilll" -> "ciilll" -> "clll" -> "cl". You are given a String s. Return the string she will get after she erases characters as described above.

### Definition

 Class: ErasingCharacters Method: simulate Parameters: String Returns: String Method signature: String simulate(String s) (be sure your method is public)

### Limits

 Time limit (s): 2 Memory limit (MB): 64

### Constraints

- s will contain between 1 and 50 characters, inclusive.
- Each character in s will be a lowercase letter ('a'-'z').

### Examples

0)

 `"cieeilll"`
`Returns: "cl"`
 This is the example from the statement.
1)

 `"topcoder"`
`Returns: "topcoder"`
 She won't erase any characters at all.
2)

 `"abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba"`
`Returns: ""`
3)

 `"bacaabaccbaaccabbcabbacabcbba"`
`Returns: "bacbaca"`
4)

 `"eel"`
`Returns: "l"`

My Solution is Below

public static String simulate(String str){
int start =0;

while(str.length()-1 >start){
char firstChar = str.charAt(start);
//   System.out.println(firstChar + " : fisrt");
char nextChar = str.charAt(start+1);
//   System.out.println(nextChar +" : next");
if(firstChar == nextChar){
str = str.substring(0, start) + str.substring(start+2, str.length());
//    System.out.println("complete:" + str);
if(start !=0){
start--;
}
}else{
start++;
}
}

//  System.out.println(str);
return str;
}

## Access Logic ##

my access is below but i don't think this is a good sample

because i just got 144point / 250 point

so other soultions are better than my solution

i attached other solution after my solution

 `cieeilll `
first point is c
first+1 point is i

c and i is differenct so first point will be 2

first point is i
first+1 point is e

c and i is differenct so first point will be 3

firtst point e
first+1 point is e

e and e is the same so cut before first point "ci" and cut after firstPoint +1 to end "ill"
and concat before string and after string

this will be ciill

first point changed first-1

Otheres are Below

public static String simulate(String s){
for(int i=0; i<s.length()-1 i++){
if(s.charAT(i) == s.charAT(i+1)){
s= s.substring(0, i) + s.substring(i+2, s.length);
i=-1;
}
}
}

sombody use StringBuffer.delete

and sombody use Stack

many different way i learend from topcoder --V