排列对称串
字符串有些是对称的,有些是不对称的,请将那些对称的字符串按从小到大的顺序输出。字符串先以长度论大小,如果长度相同,再按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; }