/*
* Copyright (c) 2010-2020 Founder Ltd. All Rights Reserved.
*
* This software is the confidential and proprietary information of
* Founder. You shall not disclose such Confidential Information
* and shall use it only in accordance with the terms of the agreements
* you entered into with Founder.
*
*/
package BiShiMianShi;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class Neicunfenpei {
/**
* 函数功能说明 内存分配
* PQ 2014-9-7
* 修改者名字修改日期
* 修改内容
* @参数: @param args
* @return void
* @throws
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner s = new Scanner(System.in);
String str1 = null;
if(s.hasNext()){
str1 = s.nextLine();
}
int[] pool = memInit(Integer.valueOf(str1));
Map m = null;
List<Integer> allcAddr = new ArrayList<Integer>();
List<Integer> sizeAddr = new ArrayList<Integer>();
m = getFreeMemSizeNum(pool);
if(s.hasNext()){
str1 = s.nextLine();
}
allcAddr.add(memAlloc(pool, m, Integer.valueOf(str1)));//第一次分配
sizeAddr.add(Integer.valueOf(str1));
m = getFreeMemSizeNum(pool);
if(s.hasNext()){
str1 = s.nextLine();
}
allcAddr.add(memAlloc(pool, m, Integer.valueOf(str1)));//第二次分配
sizeAddr.add(Integer.valueOf(str1));
m = getFreeMemSizeNum(pool);
if(s.hasNext()){
str1 = s.nextLine();
}
allcAddr.add(memAlloc(pool, m, Integer.valueOf(str1)));//第三次分配
sizeAddr.add(Integer.valueOf(str1));
if(s.hasNext()){
str1 = s.nextLine();
}
memFree(pool,sizeAddr.get(Integer.valueOf(str1)-1),allcAddr.get(Integer.valueOf(str1)-1));//释放
m = getFreeMemSizeNum(pool);
if(s.hasNext()){
str1 = s.nextLine();
}
allcAddr.add(memAlloc(pool, m, Integer.valueOf(str1)));//第四次分配
sizeAddr.add(Integer.valueOf(str1));
//打印
m = getFreeMemSizeNum(pool);
List<Integer> memSizeList = (List<Integer>) m.get("memSizeList");
System.out.println(memSizeList.size());
for(int i : memSizeList){
System.out.println(i);
}
/* List<Integer> memAddrList = (List<Integer>) m.get("memAddrList");
for(int i : memAddrList){
System.out.println(i);
}*/
}
public static int[] memInit(int poolSize){
return new int[poolSize];
}
public static int memAlloc(int[] pool,Map m,int memSize){
List<Integer> memSizeList = (List<Integer>) m.get("memSizeList");
List<Integer> memAddrList = (List<Integer>) m.get("memAddrList");
int memAddr = 0;
for(int i=0;i < memSizeList.size();i++){
if(memSizeList.get(i).intValue() >= memSize) {
memAddr = memAddrList.get(i).intValue();
for(int j=memAddr;j < memAddr+memSize;j++){
pool[j] = 1;
}
break;
}
}
return memAddr;
}
public static void memFree(int[] pool,int memSize,int memAddr){
for(int j= memAddr;j < memAddr + memSize;j++){
pool[j] = 0;
}
}
public static Map getFreeMemSizeNum(int[] pool){
int memCount = 0;
int memSize = 1;
int memAddr = -1;
List<Integer> memSizeList = new ArrayList<Integer>();
List<Integer> memAddrList = new ArrayList<Integer>();
Map<String,List> m = new HashMap<String,List>();
for(int i=1;i<pool.length;i++){
if(pool[i-1] == 0 && pool[i] == 0){
if(memAddr == -1) memAddr =i-1;
memSize++;
if(i == pool.length-1) {
memSizeList.add(memSize);
memAddrList.add(memAddr);
}
}else if((pool[i-1] == 0 && pool[i] == 1)){
memSizeList.add(memSize);
memAddrList.add(memAddr);
memSize = 1;
memAddr = -1;
}
}
m.put("memSizeList", memSizeList);
m.put("memAddrList", memAddrList);
return m;
}
}
* Copyright (c) 2010-2020 Founder Ltd. All Rights Reserved.
*
* This software is the confidential and proprietary information of
* Founder. You shall not disclose such Confidential Information
* and shall use it only in accordance with the terms of the agreements
* you entered into with Founder.
*
*/
package BiShiMianShi;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class Neicunfenpei {
/**
* 函数功能说明 内存分配
* PQ 2014-9-7
* 修改者名字修改日期
* 修改内容
* @参数: @param args
* @return void
* @throws
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner s = new Scanner(System.in);
String str1 = null;
if(s.hasNext()){
str1 = s.nextLine();
}
int[] pool = memInit(Integer.valueOf(str1));
Map m = null;
List<Integer> allcAddr = new ArrayList<Integer>();
List<Integer> sizeAddr = new ArrayList<Integer>();
m = getFreeMemSizeNum(pool);
if(s.hasNext()){
str1 = s.nextLine();
}
allcAddr.add(memAlloc(pool, m, Integer.valueOf(str1)));//第一次分配
sizeAddr.add(Integer.valueOf(str1));
m = getFreeMemSizeNum(pool);
if(s.hasNext()){
str1 = s.nextLine();
}
allcAddr.add(memAlloc(pool, m, Integer.valueOf(str1)));//第二次分配
sizeAddr.add(Integer.valueOf(str1));
m = getFreeMemSizeNum(pool);
if(s.hasNext()){
str1 = s.nextLine();
}
allcAddr.add(memAlloc(pool, m, Integer.valueOf(str1)));//第三次分配
sizeAddr.add(Integer.valueOf(str1));
if(s.hasNext()){
str1 = s.nextLine();
}
memFree(pool,sizeAddr.get(Integer.valueOf(str1)-1),allcAddr.get(Integer.valueOf(str1)-1));//释放
m = getFreeMemSizeNum(pool);
if(s.hasNext()){
str1 = s.nextLine();
}
allcAddr.add(memAlloc(pool, m, Integer.valueOf(str1)));//第四次分配
sizeAddr.add(Integer.valueOf(str1));
//打印
m = getFreeMemSizeNum(pool);
List<Integer> memSizeList = (List<Integer>) m.get("memSizeList");
System.out.println(memSizeList.size());
for(int i : memSizeList){
System.out.println(i);
}
/* List<Integer> memAddrList = (List<Integer>) m.get("memAddrList");
for(int i : memAddrList){
System.out.println(i);
}*/
}
public static int[] memInit(int poolSize){
return new int[poolSize];
}
public static int memAlloc(int[] pool,Map m,int memSize){
List<Integer> memSizeList = (List<Integer>) m.get("memSizeList");
List<Integer> memAddrList = (List<Integer>) m.get("memAddrList");
int memAddr = 0;
for(int i=0;i < memSizeList.size();i++){
if(memSizeList.get(i).intValue() >= memSize) {
memAddr = memAddrList.get(i).intValue();
for(int j=memAddr;j < memAddr+memSize;j++){
pool[j] = 1;
}
break;
}
}
return memAddr;
}
public static void memFree(int[] pool,int memSize,int memAddr){
for(int j= memAddr;j < memAddr + memSize;j++){
pool[j] = 0;
}
}
public static Map getFreeMemSizeNum(int[] pool){
int memCount = 0;
int memSize = 1;
int memAddr = -1;
List<Integer> memSizeList = new ArrayList<Integer>();
List<Integer> memAddrList = new ArrayList<Integer>();
Map<String,List> m = new HashMap<String,List>();
for(int i=1;i<pool.length;i++){
if(pool[i-1] == 0 && pool[i] == 0){
if(memAddr == -1) memAddr =i-1;
memSize++;
if(i == pool.length-1) {
memSizeList.add(memSize);
memAddrList.add(memAddr);
}
}else if((pool[i-1] == 0 && pool[i] == 1)){
memSizeList.add(memSize);
memAddrList.add(memAddr);
memSize = 1;
memAddr = -1;
}
}
m.put("memSizeList", memSizeList);
m.put("memAddrList", memAddrList);
return m;
}
}