题目描述
假定在韶关地区的第四代移动电话基站如下述方式运行。该地区划分成很多四方块,这些四方形的小区域形成了S×S 矩阵。该矩阵的行、列均从 0开始编码至 S−1 。每个方块区域包含一个基站。
方块内活动的手机数量是会发生变化的,因为手机用户可能从一个方块区域进入到另一个方块区域,也有手机用户开机或关机。每个基站会报告所在区域内手机活动数的变化。
写一个程序,接收这些基站发来来的报告,并应答关于指定矩形区域内的活动手机数的查询
输入格式
输入从标准输入设备中读取表示查询的整数并向标准输出设备写入整数以应答查询。输入数据的格式如下。每一行输入数据包含一个表示指令编号的整数及一些表示该指令的参数、指令编号及对应参数的意义如下表所示。
假定输入中的各整数值总是在合法范围内,无需对它们进行检验。具体说,例如AA是一个负数,它不可能将某一方块区域中的手机数减小到 00 以下。
下标都是从 00 开始的,即若矩阵规模为4×4、必有 0≤X≤3 且 0≤Y≤3。
我们假定: 矩阵规模:1≤S×S≤700×700
任何时候方块区域内的活动手机数:0≤V≤32767
修改值:−32768≤A≤32767
不存在指令号:U>3
输出格式
你的程序对除了编号为 2 以外的指令无需做任何应答。若指令编号为 2, 程序须向标准输出设备写入一行应答的答案。
输入样例
0 4
1 1 2 3
2 0 0 2 2
1 1 1 2
1 1 2 -1
2 1 1 2 3
3
输出样例
3
4
来源
韶关2019年市赛。
AC代码
#include<iostream>
using namespace std;
int p[705][705];
int s,x,y,a,l,b,r,t,u;
int main(){
while(1){
cin>>u;
if(u==0){
cin>>s;
}
else{
if(u==1){
cin>>x>>y>>a;
p[x][y]+=a;
if(p[x][y]<0) p[x][y]=0;
}
else{
if(u==2){
cin>>l>>b>>r>>t;
int sum=0;
for(int i=l;i<=r;i++){
for(int j=b;j<=t;j++){
sum+=p[i][j];
}
}
cout<<sum<<endl;
}
else{
break;
}
}
}
}
return 0;//养成好习惯!!!
}