202104 csp
- 1.灰度直方图
样例输入
4 4 16
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
样例输出
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
样例输入
7 11 8
0 7 0 0 0 7 0 0 7 7 0
7 0 7 0 7 0 7 0 7 0 7
7 0 0 0 7 0 0 0 7 0 7
7 0 0 0 0 7 0 0 7 7 0
7 0 0 0 0 0 7 0 7 0 0
7 0 7 0 7 0 7 0 7 0 0
0 7 0 0 0 7 0 0 7 0 0
样例输出
48 0 0 0 0 0 0 29
#include<iostream>
#include<cstring>
#include<map>
#include<iterator>
using namespace std;
int n;
int m;
int l;
int main(){
cin>>n>>m>>l;
map<int,int> h;
for(int i=0;i<l;i++){
h[i]=0;
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
int value;
cin>>value;
h[value]++;
}
}
for(map<int,int>::iterator it=h.begin();it!=h.end();it++){
cout<<it->second<<" ";
}
return 0;
}
- 2.邻域均值
样例输入
4 16 1 6
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
样例输出
7
样例输入
11 8 2 2
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 7 0 0 0 7 0 0 7 7 0
7 0 7 0 7 0 7 0 7 0 7
7 0 0 0 7 0 0 0 7 0 7
7 0 0 0 0 7 0 0 7 7 0
7 0 0 0 0 0 7 0 7 0 0
7 0 7 0 7 0 7 0 7 0 0
0 7 0 0 0 7 0 0 7 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
样例输出
83
70分
#include<iostream>
#include<vector>
using namespace std;
int n,l,r,t;
int ans = 0;
class Point{
public:
int x;
int y;
int value;
};
int isNeighbor(Point p1,Point p2){
if(abs(p1.x-p2.x)<=r&&abs(p1.y-p2.y)<=r) return 1;
return 0;
}
int main(){
cin>>n>>l>>r>>t;
vector<Point> v;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
int value;
cin>>value;
Point p={i,j,value};
v.push_back(p);
}
}
for(int i=0;i<v.size();i++){
double sum=0;
double num=0;
for(int j=0;j<v.size();j++){
if(isNeighbor(v[i],v[j])) {
num++;
sum+=v[j].value;
}
}
sum/=num;
if(sum<=t) ans++;
}
cout<<ans;
return 0;
}
优化
使用前缀和
[https://blog.csdn.net/CS_Kevin_1/article/details/115605466]
[https://tigerisland.blog.csdn.net/article/details/119704146]
主要是利用前面计算好的计算下一个(感觉像DP)
1.先计算以(i,j)为右下角的矩阵
2.找出递推关系
若r=1,要计算15的领域和(即红框),则需用绿-紫-粉+棕(因为棕色被减了两次)
ljm要加油