牛客小白月赛102

A-序列中的排列

要求:在一个序列中判断是否存在k的排列

思路:先记录读入的序列中包含哪些数字,再从记录中找1~k是否都存在,只要有一个不存在就说明不存在这个排列

cpp 复制代码
int n,k;

void solve()
{
	cin >> n >> k;
	vector<int> v;
	map<int,int> mp;
	
	for (int i = 1;i <= n;i ++) 
	{
		int x; cin >> x;
		v.pb(x);
		mp[x] ++;
	}
	
	for (int i = 1;i <= k;i ++)
	{
		if (mp[i] == 0) 
		{
			cout << "NO" << endl;
			return ;
		}
	}
	
	cout << "YES" << endl;
}

B-连分数

考察极限的相关东西??

思路:由题意可知 n趋向正无穷时f(n) = x,那么f(n - 1)也可以为x ,依照题意可得 x = a + 1 / x ===> x^2 - ax - 1 = 0;再由求根公式就可以计算出x的值

cpp 复制代码
double a;

void solve()
{
	cin >> a;
	double x = (a + sqrt(a * a + 4)) / 2;
	cout << fixed << setprecision(15) << x << endl;
}

C-sum

思路:

若数组之和小于 sum ,则将最小的数变成最大(1e4),直到数组之和大于 sum,如果可以实现跨越则说明0~1e4中存在一个数可以使得数组之和满足要求

若数组之和大于 sum ,则将最大的数变成最小(-1e4),直到数组之和小于 sum,如果可以实现跨越则说明-1e4~0中存在一个数可以使得数组之和满足要求

cpp 复制代码
const int N = 2e5 + 9; 

int n,m;
int a[N];

void solve()
{
	cin >> n >> m;
	LL sum = 0;
	LL ans = 0;
	for (int i = 1;i <= n;i ++) cin >> a[i],sum += a[i];
	
	sort(a + 1,a + n + 1);
	
	if (sum == m) cout << 0 << endl;
	else if (sum > m)
	{
		for (int i = n;i >= 1;i --)
		{
			sum -= (a[i] + 1e4);
			ans ++;
			if (sum <= m) 
			{
				cout << ans << endl;
				return;
			}
		}
	}
	else 
	{
		for (int i = 1;i <= n;i ++)
		{
			sum += (1e4 - a[i]);
			ans ++;
			if (sum >= m) 
			{
				cout << ans << endl;
				return;
			}
		}
	}
	

	
}
相关推荐
RaymondZhao3411 分钟前
【全面推导】策略梯度算法:公式、偏差方差与进化
人工智能·深度学习·算法·机器学习·chatgpt
zhangfeng113319 分钟前
DBSCAN算法详解和参数优化,基于密度的空间聚类算法,特别擅长处理不规则形状的聚类和噪声数据
算法·机器学习·聚类
啊阿狸不会拉杆1 小时前
《算法导论》第 32 章 - 字符串匹配
开发语言·c++·算法
小学生的信奥之路1 小时前
洛谷P3817题解:贪心算法解决糖果分配问题
c++·算法·贪心算法
曙曙学编程2 小时前
stm32——GPIO
c语言·c++·stm32·单片机·嵌入式硬件
你知道网上冲浪吗2 小时前
【原创理论】Stochastic Coupled Dyadic System (SCDS):一个用于两性关系动力学建模的随机耦合系统框架
python·算法·数学建模·数值分析
△曉風殘月〆3 小时前
Visual Studio中的常用调试功能(下)
c++·ide·visual studio·调试
武当豆豆3 小时前
C++编程学习(第25天)
开发语言·c++·学习
地平线开发者4 小时前
征程 6 | PTQ 精度调优辅助代码,总有你用得上的
算法·自动驾驶
Tisfy4 小时前
LeetCode 837.新 21 点:动态规划+滑动窗口
数学·算法·leetcode·动态规划·dp·滑动窗口·概率