intmain(int argc, charconst *argv[]) { int n, sum = 0; scanf("%d", &n); double avg, var = 0; for (int i = 0; i < n; ++i) { scanf("%d", &a[i]); sum += a[i]; } avg = double(sum) / n; for (int i = 0; i < n; ++i) var += (a[i] - avg) * (a[i] - avg); var /= n; for (int i = 0; i < n; ++i) printf("%f\n", (a[i] - avg) / sqrt(var)); return0; }
constlonglong base = 1000000000; structpoint { int x, y; };
point tree[1000]; longlong tree_to_num[1000]; int treasure[50][50];
boolhave_tree(longlong num_compare, int n); boolis_possible_point(int x, int y, int n, int S);
intmain() { int n, L, S; scanf("%d %d %d", &n, &L, &S); int possible_point = 0; // 可能的藏宝的地点的数量 for (int i = 0; i < n; ++i) // 读取绿化图中所有的树 { scanf("%d %d", &(tree[i].x), &(tree[i].y)); tree_to_num[i] = tree[i].x * base + tree[i].y; } sort(tree_to_num, tree_to_num + n); // 对绿化图中的数进行排序,方便查找
for (int i = 0; i <= S; ++i) // 读取藏宝图 for (int j = 0; j <= S; ++j) scanf("%d", &(treasure[S - i][j]));
for (int i = 0; i < n; ++i) { if (tree[i].x + S > L || tree[i].y + S > L) // 不能超出边界 continue; if (is_possible_point(tree[i].x, tree[i].y, n, S)) ++possible_point; }
printf("%d\n", possible_point);
return0; }
boolis_possible_point(int x, int y, int n, int S)// 判断x,y这个点是不是可能的藏宝点 { longlong num_compare; for (int i = 0; i <= S; ++i) for (int j = 0; j <= S; ++j) { num_compare = (x + i) * base + (y + j); if (treasure[i][j] && !have_tree(num_compare, n)) returnfalse; if (!treasure[i][j] && have_tree(num_compare, n)) returnfalse; } returntrue; }
boolhave_tree(longlong num_compare, int n)// 给定一个long long值,判断这个位置有没有tree { int left = 0, right = n - 1; int mid = (left + right) / 2; while (left <= right) { if (num_compare == tree_to_num[mid]) returntrue; elseif (num_compare > tree_to_num[mid]) left = mid + 1; else right = mid - 1; mid = (left + right) / 2; } returnfalse; }
set<pair<int, int>> trees; int treasure[55][55]; boolis_possible_point(pair<int, int> tree, int S);
intmain() { int n, L, S; int x, y; scanf("%d %d %d", &n, &L, &S); int possible_point = 0; // 可能的藏宝的地点的数量 for (int i = 0; i < n; ++i) // 读取绿化图中所有的树 { scanf("%d %d", &x, &y); trees.insert(make_pair(x, y)); }
for (int i = 0; i <= S; ++i) // 读取藏宝图 for (int j = 0; j <= S; ++j) scanf("%d", &(treasure[S - i][j]));
for (pair<int, int> tree : trees) { if (tree.first + S > L || tree.second + S > L) // 不能超出边界 continue; if (is_possible_point(tree, S)) possible_point++; }
printf("%d\n", possible_point);
return0; }
boolis_possible_point(pair<int, int> tree, int S) { for (int i = 0; i <= S; i++) for (int j = 0; j <= S; j++) if (trees.count(make_pair(tree.first + i, tree.second + j)) ^ treasure[i][j]) // 这里没问题 returnfalse; returntrue; }