A - ASCII codeA - ASCII code
题目大意
根据给定的整数N(在范围[97, 122]内),输出对应的ASCII码值为N的小写英文字母。
思路分析
使用cout<<char(n)<<endl;来将整数N转换为对应的字符,并输出结果到标准输出流。
时间复杂度
O(1)
代码
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
cout << char(n) << endl;
return 0;
}
B - Takahashi’s FailureB - Takahashi’s Failure
题目大意
Takahashi家里有N种食物。第ii种食物的美味程度为Ai。他不喜欢其中的K种食物:对于每个i=1,2,…,K他不喜欢第Bi种食物。
在所有N种食物中最美味的食物中(最美味有重复多个),Takahashi将随机选择一种并吃掉。如果他有机会吃到自己不喜欢的食物,则打印Yes;否则,打印No。
思路分析
题目要求判断Takahashi是否有机会吃到自己不喜欢的食物。首先找出美味程度最高的食物,然后判断这些食物中是否包含Takahashi不喜欢的食物。
时间复杂度
O(n+k)
该算法的时间复杂度主要取决于食物数量n和不喜欢的食物数量k。首先,需要遍历n个食物的美味程度,然后再进行一次遍历k个不喜欢的食物编号。max_element函数的时间复杂度为O(n),而循环判断的时间复杂度为O(k)。
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,k;
cin>>n>>k;
vector<int> a(n),b(k);
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<k;i++) cin>>b[i];
int x= *max_element(a.begin(), a.end());
for(int i=0;i<k;i++)
{
if(a[b[i]-1]==x){ cout<<"Yes"<<endl;
return 0;}
}
cout<<"No"<<endl;
return 0;
}
#C - Slot StrategyC - Slot Strategy
题目大意
给定N个卷轴,每个卷轴上有10个不同的字符0到9,每个数字恰好一次。每个卷轴都有一个按钮,按下按钮后,卷轴会在t秒后停止,显示第((t mod 10)+1)个字符。目标是找到使所有卷轴显示相同字符所需的最小秒数。
思路分析
与列有关,行用cnt[s[i][j] - ‘0’][j]++;记录,10 * (cnt[k][j] - 1) + j)由题意分析知,若每一列只有唯一一个不同的数字在0-9之间,则一次就够了,为最大j,所以更新最大j。
- 定义一个二维数组cnt[10][10]来记录每个数字在每个卷轴上出现的次数,初始化为0。
- 遍历输入的每个卷轴字符串s[i],并更新cnt数组。
- 对于每个数字k,遍历0到9的每个数字j,计算max(10 * (cnt[k][j] - 1) + j)并更新mx。
时间复杂度
O(102)
代码
#include <iostream>
#include <vector>
#include <string>
#include <climits> // 包含整型最大值常量
using namespace std;
int main() {
int n;
cin >> n;
vector<string> s(n);
vector<vector<int>> cnt(10, vector<int>(10, 0));
for (int i = 0; i < n; i++) {
cin >> s[i];
for (int j = 0; j < 10; j++) { // 遍历字符串中的每个字符
cnt[s[i][j] - '0'][j]++;
}
}
int ans = INT_MAX; // 最短时间的初始值设为整型最大值
for (int k = 0; k < 10; k++) { // 遍历每个数字
int mx = 0; // 当前数字的最大值
for (int j = 0; j < 10; j++) { // 遍历0到9的每个数字
mx = max(mx, 10 * (cnt[k][j] - 1) + j);
}
ans = min(ans, mx); // 更新最短时间
}
cout << ans << endl;
return 0;
}