
#网易互娱笔试# 这次笔试不难,我的AK代码如下,大佬勿喷
第一题
找规律,不多BB
#include <bits/stdc++.h>
using namespace std;
int t, n, m, x00, y00;
char a[210][210], b[210][210];
bool judge(int x, int y) { return x >= 0 && x < m && y >= 0 && y <= m; }
void func(int i, int j, int& new_i, int& new_j) {
new_i = x00 + n * i;
new_j = y00 + n * j;
}
int main() {
cin >> t;
while (t--) {
scanf("%d%d", &n, &m);
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j) cin >> a[i][j];
int cnt = m / n;
if (m % n) cnt += 2;
x00 = m / 2 - n / 2 - n * (cnt / 2);
y00 = x00;
for (int i = 0; i < cnt; ++i) {
for (int j = 0; j < cnt; ++j) {
int x, y;
func(i, j, x, y);
for (int k = 0; k < n; ++k) {
for (int m = 0; m < n; ++m) {
if (judge(x + k, y + m)) b[x + k][y + m] = a[k][m];
}
}
}
}
for (int i = 0; i < m; ++i) {
for (int j = 0; j < m; ++j) {
cout << b[i][j];
}
cout << endl;
}
cout << endl;
}
}
第二题
矩形相交
#include <bits/stdc++.h>
using namespace std;
int t, n, m, x00, y00;
char a[210][210], b[210][210];
bool judge(int x, int y) { return x >= 0 && x < m && y >= 0 && y <= m; }
void func(int i, int j, int& new_i, int& new_j) {
new_i = x00 + n * i;
new_j = y00 + n * j;
}
int main() {
cin >> t;
while (t--) {
scanf("%d%d", &n, &m);
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j) cin >> a[i][j];
int cnt = m / n;
if (m % n) cnt += 2;
x00 = m / 2 - n / 2 - n * (cnt / 2);
y00 = x00;
for (int i = 0; i < cnt; ++i) {
for (int j = 0; j < cnt; ++j) {
int x, y;
func(i, j, x, y);
for (int k = 0; k < n; ++k) {
for (int m = 0; m < n; ++m) {
if (judge(x + k, y + m)) b[x + k][y + m] = a[k][m];
}
}
}
}
for (int i = 0; i < m; ++i) {
for (int j = 0; j < m; ++j) {
cout << b[i][j];
}
cout << endl;
}
cout << endl;
}
}
第三题
二维数组哈希
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
int t;
bool val[5][5];
bool vi[5][5], conn[10][10];
string tmp;
unordered_set<ull> us;
int func(int x, int y) { return x * 3 + y; }
ull func1() {
ull ret = 0;
for (int i = 0; i < 9; ++i)
for (int j = i + 1; j < 9; ++j)
// if (conn[i][j]) ret += pow((ull)2, (ull)i) * pow((ull)3, (ull)j);
// if (conn[i][j]) ret += pow((ull)2, (ull)i + j);
ret = ret * 10 + (conn[i][j] ? 1 : 0);
return ret;
}
void dfs(int x, int y) {
bool pre_conn[10][10];
memcpy(pre_conn, conn, sizeof(pre_conn));
for (int i = 0; i < 3; ++i)
for (int j = 0; j < 3; ++j) {
if (!val[i][j] || vi[i][j]) continue;
bool flag = false;
if (x == i && abs(y - j) == 2 && val[x][1]) {
conn[func(x, y)][func(x, 1)] = true;
conn[func(x, 1)][func(x, y)] = true;
conn[func(x, 1)][func(x, j)] = true;
conn[func(x, j)][func(x, 1)] = true;
flag = true;
} else if (y == j && abs(x - i) == 2) {
conn[func(x, y)][func(1, y)] = true;
conn[func(1, y)][func(x, y)] = true;
conn[func(1, y)][func(i, j)] = true;
conn[func(i, j)][func(1, y)] = true;
flag = true;
} else if (abs(x - i) == 2 && abs(y - j) == 2) {
conn[func(x, y)][func(1, 1)] = true;
conn[func(1, 1)][func(x, y)] = true;
conn[func(1, 1)][func(i, j)] = true;
conn[func(i, j)][func(1, 1)] = true;
flag = true;
}
vi[i][j] = true;
if (!flag) {
conn[func(x, y)][func(i, j)] = true;
conn[func(i, j)][func(x, y)] = true;
}
us.insert(func1());
dfs(i, j);
vi[i][j] = false;
memcpy(conn, pre_conn, sizeof(pre_conn));
}
}
int main() {
scanf("%d", &t);
while (t--) {
for (int i = 0; i < 3; ++i) {
cin >> tmp;
for (int j = 0; j < 3; ++j) {
if (tmp[j] == '.')
val[i][j] = true;
else
val[i][j] = false;
}
}
us.clear();
memset(vi, 0, sizeof(vi));
memset(conn, 0, sizeof(conn));
for (int i = 0; i < 3; ++i)
for (int j = 0; j < 3; ++j) {
if (!val[i][j]) continue;
vi[i][j] = true;
dfs(i, j);
vi[i][j] = false;
}
printf("%d\n", us.size());
}
}
#网易互娱##网易笔试#