网站制作前必须做的事情有哪些,织梦dede建站教程视频,郑州的网站建设公司哪家好,wordpress 目录A.Cut#xff08;模拟#xff09;
题意#xff1a;
有一叠 N N N张扑克牌#xff0c;最上面的 i i i张扑克牌上写着一个整数 A _ i A\_i A_i。
你从牌堆底部取出 K K K张牌#xff0c;将它们放在牌堆顶部#xff0c;并保持它们的顺序。
操作后从上到下输出写在卡…A.Cut模拟
题意
有一叠 N N N张扑克牌最上面的 i i i张扑克牌上写着一个整数 A _ i A\_i A_i。
你从牌堆底部取出 K K K张牌将它们放在牌堆顶部并保持它们的顺序。
操作后从上到下输出写在卡片上的整数。
分析
我们先从 n − k 1 n-k1 n−k1输出到 n n n再从 1 1 1输出到 n − k n-k n−k。
代码
#include bits/stdc.h
using namespace std;
typedef long long LL;
#define endl \n
#define PII pairLL, LL
const int maxn 2e5 10;
const int INF 2e9 5;
const int mod 998244353;
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n, k;cin n k;vectorint a(n 1);for (int i 1; i n; i)cin a[i];for (int i n - k 1; i n; i)cout a[i] ;for (int i 1; i n - k; i)cout a[i] ;cout endl;return 0;
}
B.Decrease 2 max elements模拟
题意
给你一个由 N N N个正整数 A ( A _ 1 , A _ 2 , … , A _ N ) A (A\_1, A\_2, \dots ,A\_N) A(A_1,A_2,…,A_N)组成的序列。高桥重复下面的操作直到 A A A包含的正整数元素不超过一个
按降序排列 A A A。然后将 A _ 1 A\_1 A_1和 A _ 2 A\_2 A_2减少 1 1 1。
询问他执行此操作的次数。
分析
我们用优先队列进行模拟每次取出两个最小的分别减 1 1 1再加回到队列。直到第二小的不为正数。
代码
#include bits/stdc.h
using namespace std;
typedef long long LL;
#define endl \n
#define PII pairLL, LL
const int maxn 2e5 10;
const int INF 2e9 5;
const int mod 998244353;
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n;cin n;priority_queueint tmp;for (int i 1; i n; i){int x;cin x;tmp.push(x);}int ans 0;while (1){int a tmp.top();tmp.pop();int b tmp.top();tmp.pop();if (b 0)break;a--;b--;ans;tmp.push(a), tmp.push(b);}cout ans endl;return 0;
}
C.Triple Attack思维
题意
你正在玩一个游戏。
有 N N N个敌人排成一排最前面的 i i i个敌人的健康值是 H _ i H\_i H_i。
你将使用初始化为 0 0 0的变量 T T T重复以下操作直到所有敌人的生命值都变为 0 0 0或更少。
将 T T T增加 1 1 1。然后攻击最前方生命值大于等于 1 1 1的敌人。如果 T T T是 3 3 3的倍数敌人的生命值会减少 3 3 3否则生命值会减少 1 1 1。
当所有敌人的生命值变为 0 0 0或更少时求 T T T的值。
分析
我们发现每三次攻击敌人都会扣 5 5 5滴血对于敌人剩下小于 5 5 5滴血的情况我们特判攻击次数是否是三的倍数即可。
代码
#include bits/stdc.h
using namespace std;
typedef long long LL;
#define endl \n
#define PII pairLL, LL
const int maxn 2e5 10;
const int INF 2e9 5;
const int mod 998244353;
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n;cin n;LL ans 0;for (int i 0; i n; i){int h;cin h;ans (h / 5) * 3;h % 5;while (h 0){ans;if (ans % 3 0){h - 3;}else{h--;}}}cout ans endl;return 0;
}
D.Minimum Steiner TreeDFS
题意
给你一棵树树上有 N N N个顶点编号为 1 1 1到 N N N。第 i i i条边连接顶点 A _ i A\_i A_i和 B _ i B\_i B_i。
考虑从这个图中删除一些边和顶点可能为零后可以得到一棵树。求这样一棵树中包含所有 K K K指定顶点 V _ 1 , … , V _ K V\_1,\ldots,V\_K V_1,…,V_K的顶点的最小数目。
分析
我们以第一个保留的点为根进行 d f s dfs dfs。在 d f s dfs dfs过程中的当前点 u u u判断其是否需要保留那么我们就需要知道其子树是否有需要保留的点有则当前点 u u u需要保留。因此 D F S DFS DFS返回的东西即为该子树是否有需要保留的点。
代码
#include bits/stdc.h
using namespace std;
typedef long long LL;
#define endl \n
#define PII pairLL, LL
const int maxn 2e5 10;
const int INF 2e9 5;
const int mod 998244353;
vectorint e[maxn];
int tmp[maxn], ans;
void dfs(int u, int fa)
{for (auto v : e[u]){if (v fa)continue;dfs(v, u);if (tmp[v])tmp[u] 1;}
}
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n, k;cin n k;for (int i 1; i n; i){int u, v;cin u v;e[u].push_back(v), e[v].push_back(u);}int x;for (int i 1; i k; i){cin x;tmp[x] 1;}dfs(x, -1);for (int i 1; i n; i)ans tmp[i];cout ans endl;return 0;
}
E.Train Delay 思维
题意
在 Atcoder 国家有 N N N座城市编号为 1 1 1至 N N N以及 M M M列火车编号为 1 1 1至 M M M。列车 i i i在 S _ i S\_i S_i时刻从城市 A _ i A\_i A_i出发在 T _ i T\_i T_i时刻到达城市 B _ i B\_i B_i。
给定一个正整数 X _ 1 X\_1 X_1请你找到一组满足下列条件的非负整数 X _ 2 , … , X _ M X\_2,\ldots,X\_M X_2,…,X_M使得他们的和 X _ 2 … X _ M X\_2\ldotsX\_M X_2…X_M最小。 条件对于所有满足 1 ≤ i , j ≤ M 1 \leq i,j \leq M 1≤i,j≤M的一对 ( i , j ) (i,j) (i,j)如果 B _ i A _ j B\_iA\_j B_iA_j和 T _ i ≤ S _ j T\_i \leq S\_j T_i≤S_j那么 T _ i X _ i ≤ S _ j X _ j T\_iX\_i \leq S\_jX\_j T_iX_i≤S_jX_j。 换句话说对于任何一对原本可以换乘的列车即使将每列列车 i i i的出发和到达时间延迟 X _ i X\_i X_i仍然可以换乘。
可以证明满足这样条件的 且和 X _ 2 … X _ M X\_2\ldotsX\_M X_2…X_M最小的序列 X _ 2 , … , X _ M X\_2,\ldots,X\_M X_2,…,X_M是唯一的。
分析
我们需要知道所有列车的最早发车时间。那么 X [ i ] X[i] X[i]开车时间 - 原始开车时间。所以我们将所有时间从小到大排序遍历到的每一个出发时间能赶上他的所有到达时间已经遍历过。那么这辆车的最早开车时间就是所有能赶上他的车中到达时间的最大值。这样就能得知所有的 X [ i ] X[i] X[i]。 最后就只需要记录每个车站目前的最晚到达时间即可。
代码
#include bits/stdc.h
using namespace std;
typedef long long LL;
#define endl \n
#define PII pairLL, LL
const int N 2e5 10;
const int INF 2e9 5;
const int mod 998244353;
int n, m, x;
LL a[N], b[N], s[N], t[N], delay[N], arrival[N];
struct event
{LL type, time, id;
} tmp[N 1];int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n, m, x;cin n m x;for (int i 1; i m; i){cin a[i] b[i] s[i] t[i];tmp[2 * i - 1] {0, s[i], i};tmp[2 * i] {1, t[i], i};}sort(tmp 1, tmp 2 * m 1, [](event a, event b){if (a.time b.time) {return a.type b.type;}return a.time b.time; });delay[1] x;for (int i 1, stat; i 2 * m; i){if (tmp[i].type 0){stat a[tmp[i].id];if (tmp[i].id ! 1)delay[tmp[i].id] max(0ll, arrival[stat] - tmp[i].time);}else{stat b[tmp[i].id];arrival[stat] max(arrival[stat], tmp[i].time delay[tmp[i].id]);}}for (int i 2; i m; i)cout delay[i] ;cout endl;return 0;
}
F.Rearrange Query 博弈论
题意
给你一个由 N N N个正整数 A ( A _ 1 , A _ 2 , … , A _ N ) A (A\_1, A\_2, \dots ,A\_N) A(A_1,A_2,…,A_N)组成的序列其中每个元素至少是 2 2 2。安娜和布鲁诺用这些整数玩一个游戏。他们轮流执行以下操作安娜先执行。
自由选择一个整数 i ( 1 ≤ i ≤ N ) i \ (1 \leq i \leq N) i (1≤i≤N)。然后自由选择一个不是 A _ i A\_i A_i本身的 、 A _ i A\_i A_i的因数 x x x并用 x x x代替 A _ i A\_i A_i。
不能进行操作的一方输另一方赢。假设两位棋手都以最佳的方式行动那么谁会获胜
分析
每个 A [ i ] A[i] A[i]可以操作的次数是 A [ i ] A[i] A[i]的质因子个数设为 B [ i ] B[i] B[i]那么所有的 B [ i ] B[i] B[i]异或值不为 0 0 0时则先手必胜否则则先手必败。如果异或和为 0 0 0那么先手无论如何取数后手都可以通过操作使得异或和保持为 0 0 0直到数列 A A A全为 0 0 0先手不能取数必败。
代码
#include bits/stdc.h
using namespace std;
typedef long long LL;
#define endl \n
#define PII pairLL, LL
const int N 2e5 10;
const int INF 2e9 5;
const int mod 998244353;
int len[N];
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n;cin n;for (int i 1; i 1e5; i){for (int j i * 2; j 1e5; j i)len[j] max(len[j], len[i] 1);}int flag 0;for (int i 0; i n; i){int x;cin x;flag ^ len[x];}if (flag 0)cout Bruno endl;elsecout Anna endl;return 0;
}
s赛后交流
在比赛结束后会在交流群中给出比赛题解同学们可以在赛后查看题解进行补题。
群号 704572101赛后大家可以一起交流做题思路分享做题技巧欢迎大家的加入。