G - 贪吃的派蒙(贪心)
作者:互联网
题目大意
给出一个序列 p p p,每个数代表一个人要吃东西的数量。其中最大的数为派蒙,除了派蒙之外每个人每次能吃的数量为 [ 1 , p i ] [1,p_i] [1,pi],派蒙每次固定的吃 p m a x p_{max} pmax个。给定 k k k个食物,问能否让派蒙之前的那个人恰好吃完。
解题思路
设派蒙前面的人能吃的数量范围是 [ a , b ] [a,b] [a,b],那么如果 a ≤ k ≤ b a \leq k \leq b a≤k≤b显然一定成立。否则就必须要让派蒙吃到东西,而派蒙前面的人恰好为分界点,也就是说把这里当做终点,设除了派蒙之外的人能吃的数量范围是 [ c , d ] [c,d] [c,d],那么经过若干个周期 T T T后,食物消减的范围就是 T ∗ x , x ∈ [ c + p m a x , d + p m a x ] T*x,x\in[c+p_{max} , d+p_{max}] T∗x,x∈[c+pmax,d+pmax],也问题转化成了,能否找到 T T T满足 k ∣ ( T ∗ x ) , x ∈ [ c + p m a x , d + p m a x ] k~|~(T*x) ,x\in[c+p_{max} , d+p_{max}] k ∣ (T∗x),x∈[c+pmax,d+pmax]。
假设固定只取最小的,那么求出来的值是固定的,因为没有办法比它更小,得到 ⌊ k − a b + p m a x ⌋ \lfloor \frac{k - a}{b+ p_{max}} \rfloor ⌊b+pmaxk−a⌋,那么最终得到的 T T T的范围是 [ 1 , ⌊ k − a b + p m a x ⌋ ] [1,\lfloor \frac{k - a}{b+ p_{max}} \rfloor] [1,⌊b+pmaxk−a⌋],也就是说,只要 1 ≤ ⌊ k − a b + p m a x ⌋ ] 1 \leq \lfloor \frac{k - a}{b+ p_{max}} \rfloor] 1≤⌊b+pmaxk−a⌋]就可以满足题意。
//
// Created by Happig on 2021/1/30.
//
#include <bits/stdc++.h>
#include <unordered_map>
using namespace std;
#define ENDL "\n"
#define lowbit(x) (x & (-x))
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<double, double> pdd;
const double eps = 1e-8;
const double pi = acos(-1.0);
const int inf = 0x3f3f3f3f;
const double dinf = 1e300;
const ll INF = 1e18;
const int Mod = 998244353;
const int maxn = 3e5 + 10;
ll x[maxn];
int main() {
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t, n;
ll k;
cin >> t;
while (t--) {
cin >> n >> k;
ll pm = 0;
for (int i = 1; i <= n; i++) {
cin >> x[i];
pm = max(pm, x[i]);
}
ll a = 0, b = 0, c = n - 1, d = 0;
bool ok = 1;
for (int i = 1; i <= n; i++) {
if (x[i] == pm) {
a = i - 1;
ok = 0;
}
if (ok) b += x[i];
d += x[i];
}
if (a <= k && k <= b) {
cout << "YES" << ENDL;
continue;
}
ll r = (k - a) / (c + pm);
if (1 <= r) cout << "YES" << ENDL;
else cout << "NO" << ENDL;
}
return 0;
}
标签:typedef,const,int,max,ll,贪吃,pmax,贪心 来源: https://blog.csdn.net/qq_44691917/article/details/113482085