牛客IOI週間試合19-普及組

18231 ワード

Powered by:AB_IN局外者
Aさんの試験
メタグループからなるリストs o r t sort sort.l a m b d a lambda lambdaでいいです.長さでソート:
  • 最大和次大が等しくない場合、出力は最大である.
  • 最小およびセカンダリが等しくない場合、出力は最小である.
  • そうでなければ、C Cを出力する.
  • for _ in range(int(input())):
        a=input()
        b=input()
        c=input()
        d=input()
        lst=[(len(a),"A"),(len(b),"B"),(len(c),"C"),(len(d),"D")]
        lst.sort(key=lambda x:x[0])
        if lst[0][0]!=lst[1][0]:
            print(lst[0][1])
        elif lst[3][0]!=lst[2][0]:
            print(lst[3][1])
        else:
            print("C")
    

    B小yのシーケンス
    まず基本表を出して、1 1 1からn n,0,1,3,6,10,15......0,1,3,6,10,15......0,6,10,15......0,1,3,6,10,15......
    入力したリストからテンプレートをそれぞれ減算し,差分値を下付きとしてm a p map mapを用いて自己加算を行い,同一特質のシーケンス差分値はいずれも同じであるため,差分値自己加算が最も多いのは,最も少ないシーケンスを変更することである.
    #include
    using namespace std;
    #define ll long long
    const int N=1e8+10;
    ll n,b[N],x,ans;
    unordered_map <ll, ll> a;
    int main()
    {
         
        cin>>n;
        for(int i=1;i<=n;i++) b[i]=b[i-1]+i-1;
        for(int i=1;i<=n;i++){
         
            cin>>x;
            a[x-b[i]]++;
            ans=max(ans,a[x-b[i]]);
        }
        cout<<n-ans<<endl;
    }
    

    Cちゃんの旅
    まず2つとも>kgt k>kの辺を用いてまとめ、k≦kle k≦を含む辺を判断し、もしこの2つ自体がつながっていたら、この2つは分解しなければなりません.a n s++ans++ans++ans++ans++です.つながっていなければ、彼らをつなげさせます.
    #include
    using namespace std;
    const int N=2e6+10;
    int n,m,k,ans;
    int fa[N],a[N],b[N];
    
    inline void finit ()
    {
         
    	for(int i=1;i<=n;i++) fa[i]=i;
    }
    inline int find(int x) 
    {
         
        if(fa[x] == x) return x;
        return fa[x] = find(fa[x]);
    }
    inline void join(int a,int b)
    {
         
        int a1=find(a),b1=find(b);
        if(a1!=b1) fa[a1]=b1;
    }
    
    int main()
    {
         
        cin>>n>>m>>k;
        finit();
        for(int i=1;i<=m;i++){
         
            cin>>a[i]>>b[i];
            if(a[i]>k && b[i]>k) join(a[i],b[i]);
        }
        for(int i=1;i<=m;i++){
         
            if(a[i]<=k || b[i]<=k){
         
                int u=find(a[i]);
                int v=find(b[i]);
                if (u==v) ans++;
                fa[u]=v;
            }
        }
        cout<<ans<<endl;
        return 0;
    }
    

    終わりを告げる.