A.
暴力计算即可。
// #pragma GCC optimize(2)
#include
#include
#include
#include
#include
#include
#include
#include
#include
624
容易找规律发现相邻两项之间的关系。
// #pragma GCC optimize(2)
#include
#include
#include
#include
#include
#include
#include
#include
#include
761
C.
暴力判断即可。
// #pragma GCC optimize(2)
#include
#include
#include
#include
#include
#include
#include
#include
#include
2481215
D.
比赛的时候因为怕数迷,就没用日历表数,现在回想一下真该检查的时候数一遍。
这题我写的8880,就是因为打印函数返回值出的锅(调用函数会导致全局变量改变),但凡当时用变量存一下函数返回值也不会错了,一念之间。。。省一没了。。。。
// #pragma GCC optimize(2)
#include
#include
#include
#include
#include
#include
#include
#include
#include
8879
E.
可以用二维数组建图然后跑bfs判断是否连通。
#include
using namespace std;
int dis[6][2] = {1, -1, -1, 1, -1, -1, 1, 1, 2, 0, -2, 0};
struct Node
{
int x, y;
Node(){};
Node(int a, int b)
{
x = a, y = b;
}
};
int g[10][10];
bool book[10][10];
bool vis[10];
int a[10];
int C, ans;
bool BFS(int all)
{
memset(book, false, sizeof book);
int sx, sy;
for (int i = 1; i <= 5; i++)
for (int j = 1; j <= 3; j++)
if (g[i][j] == 1)
{
sx = i, sy = j;
break;
}
queue q;
q.push(Node(sx, sy));
book[sx][sy] = true;
int cnt = 0;
while (!q.empty())
{
Node now = q.front();
q.pop();
cnt++;
if (now.y == 2)
{
for (int i = 0; i < 4; i++)
{
int tx = now.x + dis[i][0];
int ty = now.y + dis[i][1];
if (tx >= 1 && tx <= 5 && ty >= 1 && ty <= 3 && g[tx][ty] == 1 && book[tx][ty] == false)
{
book[tx][ty] = true;
q.push(Node(tx, ty));
}
}
}
else
{
for (int i = 0; i < 6; i++)
{
int tx = now.x + dis[i][0];
int ty = now.y + dis[i][1];
if (tx >= 1 && tx <= 5 && ty >= 1 && ty <= 3 && g[tx][ty] == 1 && book[tx][ty] == false)
{
book[tx][ty] = true;
q.push(Node(tx, ty));
}
}
}
}
return cnt == all;
}
void draw(int val)
{
if (val == 1)
g[1][2] = 1;
if (val == 2)
g[2][3] = 1;
if (val == 3)
g[4][3] = 1;
if (val == 4)
g[5][2] = 1;
if (val == 5)
g[4][1] = 1;
if (val == 6)
g[2][1] = 1;
if (val == 7)
g[3][2] = 1;
return;
}
void DFS(int now, int sum)
{
if (sum == C)
{
memset(g, 0, sizeof g);
for (int i = 0; i < sum; i++)
draw(a[i]);
if (BFS(sum))
ans++;
return;
}
for (int i = now; i <= 7; i++)
{
if (vis[i] == false)
{
vis[i] = true;
a[sum] = i;
DFS(i + 1, sum + 1);
vis[i] = false;
}
}
return;
}
int main()
{
for (int i = 1; i <= 7; i++)
{
C = i;
DFS(1, 0);
}
cout << ans;
return 0;
}
80
F
// #pragma GCC optimize(2)
#include
#include
#include
#include
#include
#include
#include
#include
#include
G
当时抽疯写了个200+的弱智暴力(还不一定能对),其实只要枚举年份构造出回文串,然后把符合条件的日期存起来,二分答案即可。
H
太菜了只会暴力做,O(n^3)
是牛客多校上一道原题。
统计每个字符,对每个字符记录它上一次出现的位置vis,当前字符所能贡献的区间个数为(i-pre)*(n-i+1),i为当前字符下标。
// #pragma GCC optimize(2)
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
I
输出样例
当时如果仔细想想,应该能把n<=4的情况暴力模拟出来。。
J
输出样例
不出意外,省一应该没了,还是太菜了。。。。
2020.10.27更新
居然省一了,本来以为填空全对才能摸到省一,没想到蓝桥杯这么水。。。