• 排列对称串


    字符串有些是对称的,有些是不对称的,请将那些对称的字符串按从小到大的顺序输出。字符串先以长度论大小,如果长度相同,再按ASCII码值为排序标准.

    输入样例

    123321

    123454321

    123

    321

    sdfsdfd

    121212

    \dd\

    输出样例

    123321

    \dd\

    123454321

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <queue>
    #include <cmath>
    #include <vector>
    #include <set>
    #include <map>
    #include <algorithm>
    #include <iostream>
    using namespace std;
    typedef long long ll;
    struct cmop
    {
        bool operator()(const string &s1,const string &s2)
        {
            return (s1.length()!=s2.length()?s1.length()<s2.length():s1<s2);
        }
    };
    bool cmp(const string &s1,const string &s2)
    {
        return (s1.length()!=s2.length()?s1.length()<s2.length():s1<s2);
    }
    int main()
    {
        vector<string>v;
        multiset<string,cmop>s;
        string m,t;
        while(cin>>m)
        {
            t=m;
            reverse(t.begin(),t.end());
            if(t==m)
            {
                v.push_back(m);
                s.insert(m);
            }
        }
        sort(v.begin(),v.end(),cmp);
        for(int i=0;i<v.size();i++)
            cout<<v[i]<<endl;
        for(multiset<string,cmop>::iterator it=s.begin();it!=s.end();it++)
            cout<<*it<<endl;
        return 0;
    }

     按1的个数排序

    有一些0、1的字符串,将其按1的个数多少进行排序,个数相同按ASCII码值

    输入样例

    10011111

    00001101

    1010101

    1

    0

    1100

    输出样例

    0

    1

    1100

    00001101

    1010101

    10011111

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <queue>
    #include <cmath>
    #include <vector>
    #include <set>
    #include <map>
    #include <algorithm>
    #include <iostream>
    using namespace std;
    typedef long long ll;
    struct cmop
    {
        bool operator()(const string &s1,const string &s2)
        {
            int c1=count(s1.begin(),s1.end(),'1');
            int c2=count(s2.begin(),s2.end(),'1');
            return c1!=c2?c1<c2:s1<s2;
        }
    };
    bool cmp(const string &s1,const string &s2)
    {
        int c1=count(s1.begin(),s1.end(),'1');
        int c2=count(s2.begin(),s2.end(),'1');
        return c1!=c2?c1<c2:s1<s2;
    }
    int main()
    {
        vector<string>v;
        multiset<string,cmop>s;
        string m;
        while(cin>>m)
        {
            v.push_back(m);
            s.insert(m);
        }
        sort(v.begin(),v.end(),cmp);
        for(int i=0;i<v.size();i++)
            cout<<v[i]<<endl;
        for(multiset<string,cmop>::iterator it=s.begin();it!=s.end();it++)
            cout<<*it<<endl;
        return 0;
    }
  • 相关阅读:
    N^N hdu1060
    二叉树的所有操作
    溢出问题
    POJ1562深搜问题
    已知前序,中序,求后序
    交换a,b
    深度和广度优先搜索
    最长回文子串
    scanf
    WCF Ria Service 理解
  • 原文地址:https://www.cnblogs.com/shinianhuanniyijuhaojiubujian/p/7126980.html
Copyright © 2020-2023  润新知