zoukankan      html  css  js  c++  java
  • CF1419E Decryption(贪心+set维护)

    题意:

    给出一个正整数n,要求将它的所有不同的因子排成环,使得相邻互质的数最少,输出方案。

    题解:

    用set维护这个过程,贪心的做一下就好了。比赛的时候D2写歪了一直没看这题,泪目。

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=2e5+100;
    int t,n;
    int main () {
        scanf("%d",&t);
        while (t--) {
            scanf("%d",&n);
            set<int> st;
            st.insert(n);
            for (int i=2;i<=sqrt(n);i++) {
                if (n%i) continue;
                st.insert(i);
                st.insert(n/i);
            }
            //for (auto it=st.begin();it!=st.end();it++) printf("%d ",*it);
            vector<int> ans;
            ans.push_back(*st.begin());
            st.erase(*st.begin());
            int len=st.size();
            for (int i=1;i<=len;i++) {
                set<int> ::iterator it;
                int f=0;
                for (it=st.begin();it!=st.end();it++)
                    if (__gcd(*it,ans.back())>1) {
                        f=1;break;
                    }
                if (f) {
                    ans.push_back(*it);
                    st.erase(*it);
                }
                else {
                    ans.push_back(*st.begin());
                    st.erase(*st.begin());
                }
            }
            int cnt=0;
            for (int i=1;i<ans.size();i++) if (__gcd(ans[i],ans[i-1])==1) cnt++;
            if (__gcd(ans[0],ans.back())==1) cnt++;
            for (int v:ans) printf("%d ",v);
            printf("%d
    ",cnt);
            printf("
    ");
        }
    }
  • 相关阅读:
    57. Insert Interval
    287. Find the Duplicate Number
    52. N-Queens II
    51. N-Queens
    151. Reverse Words in a String
    29. Divide Two Integers
    [POJ2104]K-th Number
    [JSOI2008]最大数
    [BZOJ3673&3674]可持久化并查集&加强版
    C++ STL rope介绍----可持久化平衡树
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/13723579.html
Copyright © 2011-2022 走看看