#include <bits/stdc++.h>
using namespace std;
#define R return
#define ll long long
#define main WinMain
#define MAX INT_MAX
#define MIN INT_MIN
#define vi vector<int>
#define vii vector<vector<int>>
#define all(x) x.begin(),x.end()
const ll mod = 1e9 + 7;
template<typename T>
bool isOdd(T num) {
R num & 1;
}
template<typename T>
bool isEven(T num) {
R !(num & 1);
}
ll cal(vi v) {
vector<ll> t;
for (auto it:v)
t.push_back(it);
R accumulate(all(t), 0);
}
int calMax(vi v) {
R *max_element(all(v));
}
int calMin(vi v) {
R *min_element(all(v));
}
template<typename T>
vector<vector<T>> prefix(vector<vector<T>> v) {
vector<vector<T>> ret(v.size(), vector<T>(v[0].size()));
for (int i = 0, val = 0; i < ret.size(); i++, val = 0)
for (int j = 0; j < ret[i].size(); j++)
val += v[i][j], ret[i][j] += i ? val + ret[i - 1][j] : val;
R ret;
}
template<typename T>
vector<T> prefix(vector<T> v) {
vector<T> ret(v.size());
ll t = 0;
for (int i = 0; i < ret.size(); i++)
t += v[i], ret[i] = t;
// ret[i] = ret[i - 1] + v[i - 1];
R ret;
}
template<typename T>
T getPrefix(pair<T, T> a, pair<T, T> b, vector<vector<T>> v) {
T val1 = a.first - 1 >= 0 && a.second - 1 >= 0 ? v[a.first - 1][a.second - 1] : 0;
T val2 = a.second - 1 >= 0 ? v[b.first][a.second - 1] : 0;
T val3 = a.first - 1 >= 0 ? v[a.first - 1][b.second] : 0;
R v[b.first][b.second] - val2 - val3 + val1;
}
template<typename T>
void coutMat(vector<vector<T>> v) {
for (auto it:v) {
for (auto iter:it)
cout << iter << " ";
cout << endl;
}
cout << endl;
}
template<typename T>
void coutArr(vector<T> v) {
for (auto it:v)
cout << it << " ";
cout << endl;
}
vi strToArr(string str) {
int t = 0;
vi ret;
bool f = true;
for (auto it:str) {
if (isdigit(it)) {
t = t * 10 + (it - '0');
} else if (it == ',') {
ret.push_back(f ? t : -t);
f = true;
t = 0;
} else if (it == '-')
f = false;
}
ret.push_back(f ? t : -t);
R ret;
}
vector<char> strToCharArr(string s) {
vector<char> ret;
bool f = true;
for (auto it:s) {
if (it == '[')
f = false;
if ((isdigit(it) || isalpha(it)) && !f)
ret.push_back(it);
}
R ret;
}
vector<vector<char>> strToCharMat(string s) {
vector<vector<char>> ret;
string t;
bool f = true;
for (auto it:s) {
if (it == '[') {
f = false;
t += '[';
} else if (it == ']' && !f) {
ret.push_back(strToCharArr(t));
f = true;
t.clear();
} else if (!f)
t += it;
}
R ret;
}
vector<vector<int>> strToMat(string s) {
vector<vector<int>> ret;
string t;
int l = 0, r = 0;
for (int i = 0; i < s.size(); i++)
if (s[i] == '[') {
l = i + 1;
break;
}
for (int i = s.size() - 1; i >= 0; i--) {
if (s[i] == ']') {
r = i - 1;
break;
}
}
for (int i = l; i <= r; i++) {
if (s[i] == '[') {
for (int j = i; j < s.size() && s[j] != ']'; j++, i = j) {
t += s[j];
}
ret.push_back(strToArr(t));
t.clear();
}
}
R ret;
}
vector<string> strToStrArr(string s) {
vector<string> ret;
int l = 0, r = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] == '[')
l = i;
else if (s[i] == ']')
r = i;
}
vector<int> v;
for (int i = l + 1; i < r; i++) {
if (s[i] == '"')
v.push_back(i);
}
for (int i = 0; i < v.size(); i += 2) {
ret.push_back(s.substr(v[i] + 1, v[i + 1] - v[i] - 1));
}
R ret;
}
vector<vector<string>> strToStrMat(string s) {
vector<vector<string>> ret;
string t;
int l = -1, r = -1;
for (int i = 0; i < s.size() && l == -1; i++)
if (s[i] == '[')
l = i;
for (int i = s.size() - 1; i >= 0 && r == -1; i--)
if (s[i] == ']')
r = i;
s = s.substr(l + 1, r - l - 1);
vector<int> v;
l = 0;
for (int i = 0; i < s.size(); i++)
if (s[i] == '[')
l = i;
else if (s[i] == ']')
ret.push_back(strToStrArr(s.substr(l, i - l + 1)));
R ret;
}
class UnionFind {
vi parent;
int cnt;
public:
explicit UnionFind(int size) {
cnt = size;
parent.resize(size);
for (int i = 0; i < size; i++)
parent[i] = i;
}
int find(int x) {
while (x != parent[x])
parent[x] = parent[parent[x]], x = parent[x];
R x;
}
void _union(int x, int y) {
int rootX = find(x);
int rootY = find(y);
if (rootX == rootY)
R;
parent[rootX] = rootY;
cnt--;
}
int getCount() const {
R cnt;
}
};
//#include "struct.h"
class Solution {
vii v;
public:
int neighbor(int n, int l, int r, int t) {
v.resize(n, vi(n));
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
cin >> v[i][j];
// 计算前缀和
vii pre = prefix(v);
// coutMat(pre);
int ret = 0;
int idx = 1;
for (int i = 0; i < n; i++/*, cout << endl*/) {
for (int j = 0; j < n; j++) {
int row1 = -r + i > 0 ? -r + i : 0;
int col1 = -r + j > 0 ? -r + j : 0;
int row2 = r + i < n ? r + i : n - 1;
int col2 = r + j < n ? r + j : n - 1;
int cnt = (row2 - row1 + 1) * (col2 - col1 + 1);
// cout << cnt << " ";
// 计算左上角坐标,右下角坐标
// cout << idx++ << endl;
// cout << "当前坐标->" << j << "," << i << endl;
// cout << "(" << col1 << "," << row1 << ")" << endl;
// cout << "(" << col2 << "," << row2 << ")" << endl;
// 计算两个点的坐标
int val1 = col1 - 1 >= 0 && row1 - 1 >= 0 ? pre[row1 - 1][col1 - 1] : 0;
int val2 = col1 - 1 >= 0 ? pre[row2][col1 - 1] : 0;
int val3 = row1 - 1 >= 0 ? pre[row1 - 1][col2] : 0;
int val = pre[row2][col2] - val2 - val3 + val1;
// double d = (double)val / cnt;
if ((double) val / cnt <= t) {
// cout << "i->" << i << ",j->" << j << " cnt" << cnt << endl;
// cout << "(" << row1 << "," << col1 << ")" << endl;
// cout << "(" << row2 << "," << col2 << ")" << endl;
ret++;
// } else if (val / cnt == t) {
// if (val % cnt == 0)
// ret++;
}
}
}
R ret;
// cout << ret;
}
};
///*
int main() {
std::ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
//#include "struct.h"
//a 97
//A 65
Solution obj;
int n, l, r, t;
cin >> n >> l >> r >> t;
cout << obj.neighbor(n, l, r, t);
// cout << "hello world";
string s = " arr [5,6,4,3,1,2] ";
string s10 = "[6,3,3,1,4,5,3,4,1,3,4]";
vector<int> v = strToArr(s);
vector<int> v10 = strToArr(s10);
// coutArr(v);
pair<int, int> v13[10];
for (int i = 0; i < 10; i++) {
v13[i] = make_pair(i, i + 10);
}
// for (auto[a, b]:v13) {
// cout << a << " " << b << endl;
// }
string s1 = " mat ";
vector<vector<int>> v2 = strToMat(s1);
// vii v3{{},
// {0},
// {1, 3},
// {2}};
// coutMat(v2);
//
string s3 = " char arr ";
vector<char> v5 = strToCharArr(s3);
// coutArr(v5);
string s4 = " char mat ";
vector<vector<char>> v6 = strToCharMat(s4);
// coutMat(v6);
string s5 = " str arr ";
vector<string> v7 = strToStrArr(s5);
// coutArr(v7);
string s6 = " str mat ";
vector<vector<string>> v8 = strToStrMat(s6);
// coutMat(v8);
R 0;
}
/*
*/
//*/
#undef main
第二十二次csp认证-邻域均值
最新推荐文章于 2024-09-14 22:56:11 发布