2023/04/12刷题

C. Make It Good

链接

C. Make It Good

这个题是说去掉前缀,我们可以发现如果一个数列可以分为一个连续的上升区域和一个连续的下降区域的话,该数列是好的,该题的思路就是从后向前找到符合该特征的最长的序列

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
#include <cstring>
#include <unordered_set>
#include <set>
#include <stack>
#include <map>
#include <cmath>
#include <sstream>
#include <queue>
#define int long long
#define yes cout<<"YES"<<'\n'
#define no 	cout<<"NO"<<'\n'

using namespace std;
const int N = 200008;
int a[N] = {0};

void solve() {

	int n;
	scanf("%lld", &n);
	for (int i = 1; i <= n; i++) {
		scanf("%lld", &a[i]);
	}
	int mmax_id = 0;//下标最大的id
	//倒着先寻找向左递增的序列,找到第一个不符合条件的序列
	for (int i = n; i >= 2; i--) {
		if (a[i] > a[i - 1]) {
			mmax_id = i;//保存为mmax_id
			break;
		}
	}
	int l = 1;
	int ans = 0;
	//从mmaxid开始向左寻找递减序列,找到第一个不符合条件的id
	for (int i = mmax_id; i >= 2; i--) {
		if (a[i] < a[i - 1]) {
			l = i;//将最后满足条件的保存到l变量里面
			break;
		}
	}
	ans = l - 1;//答案就是l-1
	cout << ans << '\n';//打印





}
signed main () {
//	std::ios::sync_with_stdio(false), std::cin.tie(nullptr), std::cout.tie(nullptr);
	int t;
	cin >> t;
	while (t) {
		solve();
		t--;
	}


	return 0;
}

B. Perfect Number

链接

B. Perfect Number

题解上面说数据范围在2*10e7但是我证明不了为什么在这个范围之内,然后直接写一个求位数的函数直接枚举就可以了

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
#include <cstring>
#include <unordered_set>
#include <set>
#include <stack>
#include <map>
#include <cmath>
#include <sstream>
#include <queue>
#define int long long
#define yes cout<<"YES"<<'\n'
#define no 	cout<<"NO"<<'\n'

using namespace std;
const int N = 100008;

int weishu(int x) {//判断这个数的是几位数的函数
	int sum = 0;
	while (x > 0) {
		sum = sum + x % 10;
		x = x / 10;
	}
	return sum;//返回位数
}

signed main () {
	std::ios::sync_with_stdio(false), std::cin.tie(nullptr), std::cout.tie(nullptr);
	int k;
	cin >> k;
	int cnt = 0;
	int ans = 0;
	for (int i = 19; i <= 2 * 10000000; i++) {
		if (weishu(i) == 10) {
			cnt++;
		}
		if (cnt == k) {//当cnt==k的时候退出循环
			ans = i;//记录答案

			break;
		}
	}
	cout << ans << '\n';//打印结果

	return 0;
}
posted @ 2023-04-13 20:12  harper886  阅读(12)  评论(0编辑  收藏  举报