2022暑假每日一题笔记(四)
T1--3537. 树查找
给定一棵包含 n 个结点(编号 1∼n)的完全二叉树的层序遍历序列,请按照从左到右的顺序输出该树第 k 层的全部结点编号。
输入格式
第一行包含整数 n。
第二行包含 n 个整数,表示该二叉树的层序遍历序列。
第三行包含整数 k。
输出格式
共一行,按照从左到右的顺序输出该树第 k 层的全部结点编号。
数与数之间用单个空格隔开。
若无该层结点,则输出 EMPTY。
数据范围
1≤n≤1000,
1≤k≤20
输入样例:
4
1 2 3 4
2
输出样例:
2 3
#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
int n,m;
int q[N];
int main(){
cin >> n;
for (int i = 1;i <= n;i ++) cin >> q[i];
cin >> m;
if (1 << (m-1) > n) cout << "EMPTY\n";
else{
for (int i = 1 << (m-1);i < (1 << m) && i <= n;i ++){
cout << q[i] << ' ';
}
}
return 0;
}
T2--3564. 日期类
编写一个日期类,要求按 xxxx-xx-xx 的格式输出日期,实现加一天的操作。
输入格式
第一行包含整数 T,表示共有 T 组测试数据。
每组数据占一行,包含 3 个用空格隔开的整数,分别表示年月日。
输出格式
每组数据输出一行,一个结果,按 xxxx-xx-xx 的格式输出,表示输入日期的后一天的日期。
数据范围
输入日期保证合法且不会出现闰年。
年份范围 [1000,3000]
输入样例:
2
1999 10 20
2001 1 31
输出样例:
1999-10-21
2001-02-01
#include <bits/stdc++.h>
using namespace std;
int day[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int main(){
int t,y,m,d;
cin >> t;
while (t --){
cin >> y >> m >> d;
d ++;
if (d > day[m]) d = 1,m ++;
if (m > 12) m = 1,y ++;
printf("%d-%02d-%02d\n",y,m,d);
}
return 0;
}
T3--3625. 幂次方
对任意正整数 N,计算 X^N mod 233333 的值。
输入格式
共一行,两个整数 X 和 N。
输出格式
共一行,一个整数,表示 X^N mod 233333 的值。
数据范围
1≤X,N≤10^9
输入样例:
2 5
输出样例:
32
本题复习快速幂算法。
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
LL binaryPower(LL a,LL b,int t){
if (b == 0) return 1;
else if (b%2 == 1) return (a*binaryPower(a,b-1,t))%t;
else{
LL mul = binaryPower(a,b>>1,t);
return (mul*mul)%t;
}
}
int main(){
LL x,n;
cin >> x >> n;
cout << binaryPower(x,n,233333) << '\n';
return 0;
}
T4--3587. 连通图
给定一个无向图和其中的所有边,判断这个图是否所有顶点都是连通的。
输入格式
输入包含若干组数据。
每组数据第一行包含两个整数 n 和 m,表示无向图的点和边数。
接下来 m 行,每行包含两个整数 x,y,表示点 x 和点 y 相连。
点的编号从 1 到 n。
图中可能存在重边和自环。
输出格式
每组数据输出一行,一个结果,如果所有顶点都是连通的,输出 YES,否则输出 NO。
数据范围
输入最多包含 10 组数据。
1≤n≤1000,
1≤m≤5000,
1≤x,y≤n
输入样例:
4 3
1 2
2 3
3 2
3 2
1 2
2 3
输出样例:
NO
YES
可用DFS,BFS或者并查集。算并查集的模板题了。
#include <bits/stdc++.h>
using namespace std;
const int N = 1005,M = 10005; // 边是2倍的
int n,m,res;
int h[N],e[M],ne[M],idx;
bool st[N];
void add(int a,int b){
e[idx] = b,ne[idx] = h[a],h[a] = idx ++;
}
void dfs(int x){
st[x] = true;
res ++;
for (int i = h[x]; ~i;i = ne[i]){
if (!st[e[i]]) dfs(e[i]);
}
}
int main(){
while (cin >> n >> m){
memset(h,-1,sizeof h);
memset(st,0,sizeof st);
idx = res = 0; // 一些参数都要重置
int x,y;
for (int i = 0;i < m;i ++){
cin >> x >> y;
add(x,y),add(y,x);
}
dfs(1);
if (res == n) cout << "YES\n";
else cout << "NO\n";
}
return 0;
}
T5--3381. 手机键盘
参考原题。
参考题解:https://www.acwing.com/solution/content/102126/。
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
#define x first
#define y second
string s[] = {"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
int main(){
unordered_map<char,PII> t;
for (int i = 0;i < 8;i ++){
for (int j = 0;j < s[i].size();j ++){
t[s[i][j]] = {i,j+1};
}
}
string str;
while (cin >> str){
int res = t[str[0]].y;
for (int i = 1;i < str.size();i ++){
if (t[str[i]].x == t[str[i-1]].x){
res += 2;
}
res += t[str[i]].y;
}
cout << res << '\n';
}
return 0;
}
T6--3598. 二叉树遍历
假定一棵二叉树的每个结点都用一个大写字母描述。
给定这棵二叉树的前序遍历和中序遍历,求其后序遍历。
输入格式
输入包含多组测试数据。
每组数据占两行,每行包含一个大写字母构成的字符串,第一行表示二叉树的前序遍历,第二行表示二叉树的中序遍历。
输出格式
每组数据输出一行,一个字符串,表示二叉树的后序遍历。
数据范围
输入字符串的长度均不超过 26。
输入样例:
ABC
BAC
FDXEAG
XDEFAG
输出样例:
BCA
XEDGAF
#include <bits/stdc++.h>
using namespace std;
string str1,str2;
int pos[27];
struct Node{
char val;
Node *left,*right;
Node(char _val):val(_val),left(NULL),right(NULL){}
};
Node* build(int a,int b,int l,int r){
if (a > b) return NULL;
auto root = new Node(str1[a]);
int k = pos[str1[a]];
root->left = build(a+1,k-l+a,l,k-1);
root->right = build(k-l+a+1,b,k+1,r);
return root;
}
void dfs(Node* x){
if (x == NULL) return;
dfs(x->left),dfs(x->right);
cout << x->val;
}
int main(){
while (cin >> str1 >> str2){
int n = str1.size();
for (int i = 0;i < n;i ++) pos[str2[i]] = i;
Node *root = build(0,n-1,0,n-1);
dfs(root);
cout << '\n';
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异