零点工作室暑假集训(AtCoder--ABC235)

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值