//杭电ACM敌兵布阵问题
//用链表的方法实现
//链表使用数组实现的
#ifndef LIST_H_
#define LIST_H_
const int MAX_LIST=5000;
typedef int ListType;
class List
{
public:
List();
bool isEmpty()const;
int getLength()const;
void insert(int index,ListType newItem);
void show()const;
void Add(int i,int j);
void Sub(int i,int j);
void Query(int i,int j);//i<j
void End()const;
private:
ListType items[MAX_LIST];
int size;
int translate(int ine) const;
};
#endif
#include"2.h"
#include<iostream>
List::List():size(0) {}
bool List::isEmpty()const
{
return size==0;
}
int List::getLength()const
{
return size;
}
void List::insert(int index,ListType newItem)
{
for(int i=size;i>=index;i--)
items[translate(i+1)]=items[translate(i)];
items[translate(index)]=newItem;
++size;
}
int List::translate(int ine) const
{
return ine-1;
}
void List::show()const
{
using std::cout;
for(int i=0;i<size;i++)
cout<<items[i]<<' ';
}
void List::Add(int i,int j)//i和j为正整数,表示第i个营地增加j个人(j不超过30)
{
items[translate(i)]=items[translate(i)]+j;
}
void List::Sub(int i,int j)//i和j为正整数,表示第i个营地减少j个人(j不超过30)
{
items[translate(i)]=items[translate(i)]-j;
}
void List::Query(int i,int j)//i和j为正整数,i<=j,表示询问第i到第j个营地的总人数
{
using std::cout;
int sum=0;
for(int m=translate(i);m<=translate(j);m++)
sum=sum+items[m];
cout<<sum<<std::endl;
}
void List::End()const
{
std::cout<<"End"<<std::endl;
}
#include"2.h"
#include<iostream>
int main()
{
using namespace std;
List list;
int count=0;
int people=0;
cout<<"输入营地的个数: ";
cin>>count;
cout<<endl<<"输入各个营地的初始人数 ";
for(int i=0;i<count;i++)
{
cin>>people;
list.insert(i+1,people);
}
list.Query(1,3);
list.Add(3,6);
list.Query(2,7);
list.Sub(10,2);
list.Add(6,3);
list.Query(3,10);
list.End();
return 0;
}