U530745 CF725E 强力 Hack 数据 1

题目背景

本题因为总时长不能大过 $\tt 120~s$ 的原因,该题评测 `T1~50.in/.out` 的数据。 本题满分 $\tt 100~pts$,单个测试点 $2$ 分,两题总共分数 $\tt 200~pts$。

题目描述

给定一件 $c$ 元的物品,以及 $n$ 个硬币,其中硬币的面值可以时任意价格,第 $i$ 个硬币面值为 $w_i$,现在要用这 $n$ 个硬币恰好凑出 $c$ 元。 有这样一种贪心策略:初始选择集合 $S$ 为空,每次选择不超过剩余所需价值的最大面值硬币并将其加入 $S$ 中。 但是出题人表示不服,要卡掉这个算法。 他要加入任意数量的硬币,每个硬币可以是任意面值,使得最后算法不能得出合法的 $S$ 集合。同时他想最小化加入硬币的总价值。

输入格式

第一行,输入一个正整数 $c$。 第二行,输入一个正整数 $n$。 接下来 $n$ 行,每行输入一个正整数,第 $i$ 行的数表示 $w_i$。

输出格式

输出该组数据最小代价,如果出题人永远无法卡掉这个算法,那么输出 `Greed is good`,不含逗号。

说明/提示

### 样例 $1$ 解释 出题人再加一个硬币,面值为 $5$,就可以卡掉了。 ### 样例 $2$ 解释 没有办法卡掉这个算法,可以证明。 ### 数据范围 对于 $100\%$ 的数据,$1 \leq c,n \leq 200000$,对于所有的 $i(1 \leq i \leq n)$ 有 $1 \leq w_i \leq c$。 ### 另附 数据生成器: ```cpp #include #define x0 x_0 #define x1 x_1 #define y0 y_0 #define y1 y_1 #define yn y_n #define j0 j_0 #define j1 j_1 #define k0 k_0 #define k1 k_1 #define d0 d_0 #define d1 d_1 #define LL long long #define LD long double #define ZPB push_back #define ZPF push_front #define US unsigned using namespace std; mt19937 Rand(time(0)); int w[200010],ok[200010],okcnt,cnt; multiset st; int main(){ freopen("T.in","w",stdout); ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int c=200000,n=500; // c,n 也可以调 while(true){ st.clear(),okcnt=0; for(int i=1;i=24){ // 更改 okcnt 也可以让数据强度更高,但是 w[i] 和 okcnt 的参数都要不断的调 // 数据强度够,输出使用的数的步骤 cerr