A - Rotate
设xyz表示一个3位数,其数字分别为x,y,z(从左到右)。给定一个3位数abc,其中每个数字都不是0,找到abc+bca+cab的值。
思路:可以直接求出a,b, c的值,也可以通过数学知识来找出他们之间的关系
AC代码
1.
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 100010, INF = 0x3f3f3f3f, mod = 998244353;
int n, x;
map<int, int> mp;
int main()
{
cin >> n;
int a = n / 100;
int b = (n - a * 100) / 10;
int c = n % 10;
cout << a * 100 + b * 10 + c + b * 100 + c * 10 + a + c * 100 + a * 10 + b;
return 0;
}
2.
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 100010, INF = 0x3f3f3f3f, mod = 998244353;
int main()
{
char a, b, c;
cin >> a >> b >> c;
int A = a - '0';
int B = b - '0';
int C = c - '0';
int res = A * 111 + B * 111 + C * 111;
cout << res << endl;
return 0;
}
B - Climbing Takahashi
题意: 有N个平台按照一行排列。从左边起,第i个平台的高度为Hi。
Takahashi初始站在最左边的平台上。
由于他喜欢高度,他会重复以下动作,直到无法再继续。
如果他站的平台不是最右边的平台,并且右边的平台的高度大于当前平台的高度,那么他就跳到右边的平台上。
找到他最后所站的平台的高度。
思路:直接根据题意模拟即可,每次都到更高的平台,第一次不能到达时就break
AC代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 100010, INF = 0x3f3f3f3f, mod = 998244353;
int n, res, h;
int main()
{
cin >> n;
for(int i = 1; i <= n; i ++)
{
cin >> h;
if(h > res) res = h;
else break;
}
cout << res << endl;
return 0;
}
C - The Kth Time Query
题意: 我们有一个N个数字的序列A=(a1,a2,…,aN)。处理下面解释的Q个查询。
查询i:给定整数对(xi,ki),我们从序列A的开头逐个查看元素:a1,a2,…,哪个元素将是数字xi的第ki个出现的元素?
打印该元素的索引,如果没有这样的元素,则打印-1。
思路:寻找x在数列中第k次出现,因为数据范围达到了1e9,所以使用map存一下然后查找,时间复杂度是O(1)
AC代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 100010, INF = 0x3f3f3f3f, mod = 998244353;
int n, q;
map<int, vector<int>> mp;
int main()
{
cin >> n >> q;
for (int i = 1; i <= n; i ++)
{
int x;
cin >> x;
mp[x].push_back(i);
}
while(q --)
{
int x, k;
cin >> x >> k;
if (k > mp[x].size()) cout << -1 << endl;
else cout << mp[x][k-1] << endl;
}
return 0;
}