B. Cow and Friend
Posted pixel-teee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了B. Cow and Friend相关的知识,希望对你有一定的参考价值。
题目链接:https://codeforces.com/contest/1307/problem/B.
分析:我们设最大的喜爱的数为y,假设y > x,我们可以构造一个三角形,两边之和大于第三边,那么就只要跳两步。这是情况1。
我们再考虑第二种情况,y < x时,我们可以在之前平铺y,再最后构造一个等腰三角形,两边都是y,假设之前平铺的y使用n步,最后跳了2步构造了一个等腰三角形,我们如何求出(n + 2)呢?
我们来推一下,我们可以得到n * y + p = d,而我们尽可能地想让n小,那么p就要尽可能地大,那么p最大可以是多少呢?那么最好的结果就是尽量靠近2 * y,那我们可以让p取到p ~ 2p之间,这是最好的结果,这样n = d / y - p / y = d / y - 1,然后我们可以算出结果d / y - 1 + 2 = ceil(d / y)。这个上取整就是这样推出来的。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 100005;
int a[N];
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
int n, x;
scanf("%d%d", &n, &x);
int m = 0;
bool flag = false;
for (int i = 1; i <= n; ++i)
{
scanf("%d", &a[i]);
if (a[i] == x) flag = true;
m = max(m, a[i]);
}
if (flag)
{
puts("1");
}
else
{
if (m > x)
{
puts("2");
}
else
{
printf("%d
", (x + m - 1) / m);
}
}
}
return 0;
}
以上是关于B. Cow and Friend的主要内容,如果未能解决你的问题,请参考以下文章
CF174 div1 B. Cow Program 记忆化搜索
B. Cormen — The Best Friend Of a Man1000 / 贪心
Codeforces Round #377 (Div. 2) B. Cormen — The Best Friend Of a Man(贪心)
Codeforces 1209D. Cow and Snacks
[2016-2-15]OMG美语每日笔记-How do you send greetings and blessings to friend and family during difficul t