给定Takahashi和Aoki的起床时间,判断谁先起床。
题目要求比较Takahashi和Aoki的起床时间。首先,将起床时间转换为以分钟为单位。然后,通过比较两者的起床时间来确定谁先起床。
O(1)
基本的数学运算
#include
using namespace std;
int main(void) {
int a, b, c, d;
cin >> a >> b >> c >> d;
if (a < c)cout << "Takahashi" << endl;
else if (a > c)cout << "Aoki" << endl;
else {
if (b <= d)cout << "Takahashi" << endl;
else cout << "Aoki" << endl;
}
return 0;
}
给定一个整数序列,找到最小的非负整数,该整数不在序列中。
为了找到最小的非负整数,可以遍历整数序列,并使用一个集合(或数组)来记录序列中出现的所有整数。然后,从0开始逐个判断整数是否在集合中,直到找到第一个不在集合中的非负整数为止。
O(N)
数组(或集合)
#include
#include
using namespace std;
int main()
{
int n;
cin>>n;
unordered_set<int> num;
for(int i=0;i<n;i++)
{
int nu;
cin>>nu;
num.insert(nu);
}
int sm=0;
while(num.find(sm)!=num.end())
{sm++;
}
cout<<sm<<endl;
return 0;
}
给定两个长度为N的整数序列A和B,判断是否存在一个长度为N的序列X满足以下条件:
可以使用动态规划来解决这个问题。定义dp[i]表示考虑到(X1, X2, …, Xi)的情况下,是否可以让Xi = Ai,定义ep[i]表示考虑到(X1, X2, …, Xi)的情况下,是否可以让Xi = Bi。根据题目条件,可以得出以下转移方程:
O(N)
动态规划
#include
#include
#include
#include
using namespace std;
int main() {
int N, K;
cin >> N >> K;
vector<int> A(N), B(N);
for (int i = 0; i < N; ++i) {
cin >> A[i];
}
for (int i = 0; i < N; ++i) {
cin >> B[i];
}
unordered_set<int> before;
before.insert(A[0]);
before.insert(B[0]);
for (int i = 1; i < N; ++i) {
unordered_set<int> tmp;
for (int b : before) {
if (abs(b - A[i]) <= K) {
tmp.insert(A[i]);
}
if (abs(b - B[i]) <= K) {
tmp.insert(B[i]);
}
}
if (tmp.empty()) {
cout << "No" << endl;
return 0;
}
before = tmp;
}
cout << "Yes" << endl;
return 0;
}