UESTC第十届ACM趣味程序设计竞赛第五场(正式赛)个人解题记录

比赛地址https://lutece.xyz/contest/detail/10/

A Cooking

这题的思路比较简单,算出来一共多少步然后除就完事了,但要注意K与N的大小问题

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
	int n,m,k,t;
	int sum;
	cin >> n >> m >> k >> t;
	sum = n * m / min(k,n);
	if ((n*m) % k != 0 && n>k)
	{
		++sum;
	}
	cout << sum*t;
	return 0;
}

B You Know Nothing, Jon Snow

这题一开始想到是暴力,然后看了下数据范围感觉不可取

思考了一会后,想出了关键

如果N是偶数的话,就会一直-2 -2下去,如果N是奇数的话,只要进行几次减法就会变成偶数

想明白后,就变得很简单了

第一次交的时候TLE,所以改进了一下算法

#include <iostream>
using namespace std;
long long solve(long long a)
{
	if (a % 2 == 0)return 2;
	if (a % 3 == 0)return 3;
	if (a % 5 == 0)return 5;
	if (a % 7 == 0)return 7;
	for (long long i = 11; i < a / 11; i += 2)
	{
		if (a%i == 0)return i;
	}
	return a;
}
int main()
{
	long long n;
	long long sma;
	long long sum = 0;
	cin >> n;
	sma = solve(n);
	while (sma != 2 && n!=0)
	{
		n -= sma;
		sma = solve(n);
		++sum;
	}
	sum += n / 2;
	cout << sum;
	return 0;
}

D Slay The Spire

第三题看不懂,所以先写第四

这道题题目描述很多,实际上很多内容是坑人的

搞清楚规则后,写模拟,但是一直卡在第三个点过不去

比赛结束前最后几分钟才想出来还差一个地方没写,但是写了又过不了,后面才知道不能同归于尽

讲下思路,跳关卡应该用在消耗生命值最大的地方,而不是非用不可时才使用

有时候一次不用也可以打到BOSS,但是打不过,只要用跳关加上生命值就能打过(这个是最后几分钟才想到的)

#include <iostream>
using namespace std;
int main()
{
	long m, n, m1;
	bool isboss = true;
	int a[100000];
	int max = 0;
	long themax;
	bool skip = true;
	cin >> m >> n;
	m1 = m;
	for (long i = 0; i < n - 1; ++i)
	{
		cin >> a[i];
		if (m > a[i])
		{
			m -= a[i];
			m += 6;
			if (a[i] > max)
			{
				max = a[i];
				themax = i;
			}
		}
		else
		{
			if (skip)
			{
				m += 6;
				skip = false;
				continue;
			}
			else
			{
				isboss = false;
				for (long i1 = i + 1; i1 < n; ++i1)
				{
					cin >> a[i1];
				}
				break;
			}
		}
	}
	if (isboss)
	{
		int boss;
		cin >> boss;
		if (m > boss)
		{
			cout << "YES";
		}
		else
		{
			if (m + max > boss && skip)
			{
				cout << "YES";
			}
			else
			{
				cout << "NO";
			}
		}
	}
	else
	{
		bool again = true;
		skip = true;
		for (long i = 0; i < n - 1; ++i)
		{
			if (i == themax && skip)
			{
				m1 += 6;
				skip = false;
				continue;
			}
			if (m1 > a[i])
			{
				m1 -= a[i];
				m1 += 6;
			}
			else
			{
				if (skip)
				{
					m1 += 6;
					skip = false;
					continue;
				}
				else
				{
					again = false;
					break;
				}
			}
		}
		if (again)
		{
			if (m1 > a[n - 1])
			{
				cout << "YES";
			}
			else
			{
				cout << "NO";
			}
		}
		else
		{
			cout << "NO";
		}
	}
	return 0;
}

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注