Atcoder #017 agc017 B.Moderate Differences 思维

LINK

题意:给出最左和最右两个数,要求往中间填n-2个数,使得相邻数间差的绝对值$∈[L,R]$

思路:其实也是个水题,比赛中大脑宕机似的居然想要模拟构造一个数列,其实我们只要考虑作为结果的数,其结果必定是进行n-1次了+L -L +R -R 的其中一项,其最小值为$x*L-(n-1-x)*R$ 最大值则是$x*R-(n-1-x)*L$ 那么我们枚举x 其中只要有一种情况使b在区间中满足条件就行了

/** @Date    : 2017-07-09 20:31:43
  * @FileName: B.cpp
  * @Platform: Windows
  * @Author  : Lweleth (SoungEarlf@gmail.com)
  * @Link    : https://github.com/
  * @Version : $Id$
  */
#include <bits/stdc++.h>
#define LL long long
#define PII pair
#define MP(x, y) make_pair((x),(y))
#define fi first
#define se second
#define PB(x) push_back((x))
#define MMG(x) memset((x), -1,sizeof(x))
#define MMF(x) memset((x),0,sizeof(x))
#define MMI(x) memset((x), INF, sizeof(x))
using namespace std;

const int INF = 0x3f3f3f3f;
const int N = 1e5+20;
const double eps = 1e-8;


int main()
{
	LL n, a, b, l, r;
	while(~scanf("%lld%lld%lld%lld%lld", &n, &a, &b, &l, &r)){
		int flag = 1;
		LL x, y;
		for(LL i = 0; i <= n - 1; i++)
		{
			x = a + l * i - (n - i - 1) * r;
			y = a + r * i - (n - i - 1) * l;
			if(x <= b && b <= y)
				flag = 0;
		}
		printf("%s
", flag?"NO":"YES");
	}
    return 0;
}
原文地址:https://www.cnblogs.com/Yumesenya/p/7145457.html