与Shikamaru战斗之后,Tayuya决定她的长笛太可预测了,并用吉他代替了。吉他有6根琴弦和无数个从1开始编号的琴格。在第i弦上微调琴格编号j会产生音符ai + j。
Tayuya想要演奏n个音符的旋律。每个音符可以用不同的弦乐组合演奏。演奏的难易程度取决于所用琴格的最大和最小索引之间的差异。这种差异越小,执行该技术就越容易。请确定可能的最小差异。
例如,如果a = [1,1,2,2,3,3],并且音符序列为4,11,11,12,12,13,13(对应于第二个示例),我们可以玩第一个字符串的第一个音符,第六个字符串的所有其他音符。如图所示,然后最大品格为10,最小品格为3,答案为10-3 = 7。
输入值
第一行包含6个以空格分隔的数字a1,a2,...,a6(1≤ai≤109),它们描述了Tayuya的弦。
第二行包含唯一的整数n(1≤n≤100000),代表旋律中音符的数量。
第三行由n个整数b1,b2,...,bn(1≤bi≤109)组成,以空格分隔。他们描述了要演奏的音符。保证所有1≤i≤n和1≤j≤6的bi> aj,换句话说,您可以在任何字符串上弹奏每个音符。
输出量
打印所用品格的最大和最小索引的最小可能差异。
#include<bits/stdc++.h> using namespace std; const int maxn=2e5+100; int n,a[maxn],b[maxn]; set<pair<int,int> > st; int id[maxn]; int main () { for (int i=1;i<=6;i++) scanf("%d",a+i); sort(a+1,a+7); scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%d",b+i); for (int i=1;i<=n;i++) { id[i]=6; st.insert(make_pair(b[i]-a[id[i]],i)); } int ans=(*st.rbegin()).first-(*st.begin()).first; set<pair<int,int> > ::iterator p; while (1) { p=st.begin(); int u=p->second; st.erase(p); if (id[u]==1) break; id[u]--; st.insert(make_pair(b[u]-a[id[u]],u)); ans=min(ans,(*st.rbegin()).first-(*st.begin()).first); } printf("%d ",ans); }