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

	
}
相关推荐
C++ 老炮儿的技术栈2 小时前
Qt5.9.1 Windows 完整开发环境搭建流程
开发语言·c++·windows·qt·编辑器·代码化
泡沫冰@2 小时前
GO 语言基础
开发语言·算法·golang
键盘会跳舞3 小时前
C++:std::tuple 源码级深度拆解——变参模板、SFINAE与模板元编程核心技巧
开发语言·c++·sfinae·变参模板
bkspiderx3 小时前
从零开始:VS Code搭建C/C++开发环境全指南(Windows/macOS/Linux)
c语言·c++·windows·vs code·c/c++开发环境
东华万里3 小时前
第40篇C++核心基础与工程实践:从底层逻辑到避坑指南
开发语言·c++·面试·大学生专区
luj_17683 小时前
元设计的诱惑与现实
c语言·开发语言·c++·经验分享·算法
小星星闪亮登场3 小时前
ST表--倍增思想
开发语言·数据结构·c++·算法·思维
东华万里3 小时前
第40篇 C++核心基础与工程实践:从底层逻辑到避坑指南
开发语言·c++·大学生专区
AC赳赳老秦3 小时前
OpenClaw 多源采集公开行业数据:从原始信息到研究报告初稿的自动化实践
java·c语言·c++·python·php·deepseek·openclaw
玩三国杀玩的4 小时前
Pytorch-c++-CUDA
c++·pytorch·python·深度学习