3235 战争
时间限制: 2 s
空间限制: 128000 KB
题目等级 : 钻石 Diamond
题目描述 Description
2050年,人类与外星人之间的战争已趋于白热化。就在这时,人类发明出 一种超级武器,这种武器能够同时对相邻的多个目标进行攻击。凡是防御力小于或 等于这种武器攻击力的外星人遭到它的攻击,就会被消灭。然而,拥有超级武器是 远远不够的,人们还需要一个战地统计系统时刻反馈外星人部队的信息。这个艰巨 的任务落在你的身上。请你尽快设计出这样一套系统。 这套系统需要具备能够处理如下2类信息的能力: 1.外星人向[x1,x2]内的每个位置增援一支防御力为v的部队。 2.人类使用超级武器对[x1,x2]内的所有位置进行一次攻击力为v的打击。系统需 要返回在这次攻击中被消灭的外星人个数。 注:防御力为i的外星人部队由i个外星人组成,其中第j个外星人的防御力为j。
输入描述 Input Description
第一行读入n,m。其中n表示有n个位置,m表示有m条信息。 以下有m行,每行有4个整数k,x1,x2,v用来描述一条信息 。k表示这条信息属 于第k类。x1,x2,v为相应信息的参数。k=1 or 2。 注:你可以认为最初的所有位置都没有外星人存在。 规模:0<n<=1000;0<x1<=x2<=n;0<v<=1000;0<m<=2000
输出描述 Output Description
结果输出。按顺序输出需要返回的信息。
样例输入 Sample Input
3 5 1 1 3 4 2 1 2 3 1 1 2 2 1 2 3 1 2 2 3 5
样例输出 Sample Output
6
9
数据范围及提示 Data Size & Hint
详见试题
1 #include<cstdio> 2 int s[1010][1010]; 3 int read) 4 { 5 int x = 0, f = 1;char ch = getchar); 6 while ch<'0' || ch>'9') {if ch=='-') f=-1; ch=getchar);} 7 while ch>='0' && ch<='9') {x = x*10+ch-'0'; ch=getchar);} 8 return x*f; 9 } 10 void workint k,int x,int y,int v) 11 { 12 int ans = 0; 13 if k==1) 14 for int i=x; i<=y; ++i) 15 for int j=1; j<=v; ++j) 16 s[i][j]++; 17 if k==2) 18 { 19 for int i=x; i<=y; ++i) 20 for int j=1; j<=v; ++j) 21 if s[i][j]!=0) 22 { 23 ans += s[i][j]; 24 s[i][j] = 0; 25 } 26 printf"%d ",ans); 27 } 28 return ; 29 } 30 int main) 31 { 32 int n,m,a,b,c,d; 33 n = read); m = read); 34 for int i=1; i<=m; ++i) 35 { 36 a = read);b = read);c = read);d = read); 37 worka,b,c,d); 38 } 39 return 0; 40 }