Atcoder #017 agc017 B.Moderate Differences 思维
题意:给出最左和最右两个数,要求往中间填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\n", flag?"NO":"YES"); } return 0; }