标签:color ++i std size while int 包含 -- str
1、给出一个$2*n$的矩阵,只包含小写字母。重新排列各个元素使得任意两个相邻的元素不相同?
思路:按照每种字符的数量降序排序,然后从多到少依次放每一种。放的时候一上一下交错放置。
#include <stdio.h>
#include <string>
#include <stack>
#include <vector>
#include <string.h>
#include <algorithm>
#include <assert.h>
using namespace std;
const int N=100005;
class ColorfulGarden
{
public:
vector<string> rearrange(vector<string> A)
{
pair<int,int> a[26];
for(int i=0;i<26;++i) a[i].first=0,a[i].second=i;
const int n=(int)A[0].size();
const string p=A[0];
const string q=A[1];
for(int i=0;i<n;++i) ++a[p[i]-‘a‘].first;
for(int i=0;i<n;++i) ++a[q[i]-‘a‘].first;
sort(a,a+26);
reverse(a,a+26);
vector<string> B;
if(a[0].first>n) return B;
vector<char> all;
for(int i=0;i<26;++i)
{
while(a[i].first--) all.push_back(‘a‘+a[i].second);
}
char ans[2][55];
memset(ans,0,sizeof(ans));
for(int i=0;i<n;++i)
{
if(i&1) ans[0][i]=all[i];
else ans[1][i]=all[i];
}
for(int i=n;i<n+n;++i)
{
if((i-n)&1) ans[1][i-n]=all[i];
else ans[0][i-n]=all[i];
}
string s1="",s2="";
for(int i=0;i<n;++i)
{
s1+=ans[0][i];
s2+=ans[1][i];
}
B.push_back(s1);
B.push_back(s2);
return B;
}
};
2、构造一个$n*n$的二维数字表$A$,满足:(1)表中所有的数字范围为$[0,n-1]$,(2)$A$的所有‘good‘子集个数恰好为$x$。‘good‘子集的定义为对于从$[0,n-1]$中选出的一个非空子集$T$,任意的$i,j \in T$,那么$A_{i,j} \in T$。
标签:color ++i std size while int 包含 -- str
原文地址:http://www.cnblogs.com/jianglangcaijin/p/6917286.html