牛客小白月赛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;
			}
		}
	}
	

	
}
相关推荐
CoovallyAIHub几秒前
MSD-DETR:面向机车弹簧检测的可变形注意力Detection Transformer
算法·架构
CoovallyAIHub5 分钟前
不改权重、不用训练!BEM用背景记忆抑制固定摄像头误检,YOLO/RT-DETR全系有效
算法·架构·github
Struggle_97559 分钟前
算法知识-从递归入手三维动态规划
算法·动态规划
yuan1999715 分钟前
使用模糊逻辑算法进行路径规划(MATLAB实现)
开发语言·算法·matlab
不才小强18 分钟前
线性表详解:顺序与链式存储
数据结构·算法
CoovallyAIHub19 分钟前
上交+阿里 | Interactive ASR:Agent框架做语音识别交互纠错,1轮交互语义错误率降57%
算法·架构·github
Aaron158829 分钟前
8通道测向系统演示科研套件
人工智能·算法·fpga开发·硬件工程·信息与通信·信号处理·基带工程
计算机安禾34 分钟前
【数据结构与算法】第42篇:并查集(Disjoint Set Union)
c语言·数据结构·c++·算法·链表·排序算法·深度优先
吃着火锅x唱着歌36 分钟前
LeetCode 150.逆波兰表达式求值
linux·算法·leetcode
YuanDaima20481 小时前
二分查找基础原理与题目说明
开发语言·数据结构·人工智能·笔记·python·算法