zoukankan      html  css  js  c++  java
  • CF1435C Perform Easily(Set)

    与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);
    } 
  • 相关阅读:
    后缀自动机在复习
    冬令营模拟day2总结
    割点(模板)
    黑匣子
    挤牛奶
    上白泽慧音
    lca最小公共祖先祖先
    最小花费
    牛的旅行(标程)
    骑马修栅栏
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/13884707.html
Copyright © 2011-2022 走看看