# topcoder srm 689 div1 -3

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$。

## Topcoder SRM 643 Div1 250&lt;peter_pan&gt;

Topcoder SRM 643 Div1 250 Problem 给一个整数N,再给一个vector<long long>v; N可以表示成若干个素数的乘积,N=p0*p1*p2*......*pn,我们假设p0,p1,...,pn是单调不降的,那么v里存储的是下标为偶数 的N的质因数p0,p2,p4,...,p(2k).现在要求写一个程序,返回一个vector<long long>ans; ans里存储的是p0,p1,p2,...,pn. Limits Time Limit(m

## Topcoder SRM 648 Div1 250

Problem 给一个长度为N的"AB"字符串S,S只含有两种字符'A' 或 'B',设pair(i,j)(0=<i<j<N)表示一对 i,j 使得S[i]='A',S[j]='B'.现给定一个K,求字符串S,使得pair(i,j)的个数恰好为K.若不存在,则返回空串. Limits Time Limit(ms): 2000 Memory Limit(MB): 256 N: [2, 50] K: [0 , N*(N-1)/2 ] Solution 若K>(N/2

## Topcoder SRM 627 div1 HappyLettersDiv1 : 字符串

Problem Statement      The Happy Letter game is played as follows: At the beginning, several players enter the field. Each player has a lowercase English letter on their back. The game is played in turns. In each turn, you select two players with dif

## topcoder srm 738 div1 FindThePerfectTriangle(枚举)

Problem Statement      You are given the ints perimeter and area. Your task is to find a triangle with the following properties: The coordinates of each vertex are integers between 0 and 3000, inclusive. The perimeter of the triangle must be exactly

## topcoder srm 320 div1

problem1 link 两个数字后面都有阶乘符号,可以抵消. import java.util.*; import java.math.*; import static java.lang.Math.*; public class ExtraordinarilyLarge { public String compare(String x, String y) { boolean both=false; while(x.endsWith("!")&&y.endsWit

## topcoder srm 712 div1 -23

1.给定两个长度为$n$的数组$A,B$.有两种操作可以作用于数组$A$.第一种,将每个元素左侧的相邻数字加到其上:第二种,将每个元素右侧的相邻数字加到其上.0的左侧是$n-1$,$n-1$的右侧是0.比如1,2,3,4执行第一种操作后是5,3,5,7.给出一个不超过100的操作序列使得$A$变成$B$.$n \leq 50$. 思路:将$a_{0},a_{1},...,a_{n-1}$看做$a_{0}x^{0}+a_{1}x^{1}+...+a_{n-1}x^{n-1}$.那么第一种操作相当于

## Topcoder SRM 653 Div1 250

Problem N个人坐成一排,属于同一个公司的人都坐在一起(挨在一起),但不知道谁属于哪个公司.现在问其中的某些人 他属于哪个公司,他的回答是Ai,Ai=0表示此人未被询问,否则表示他的回答.题目保证一定存在一种分组方案使得属于同一公司的人都坐在一起.现问方案是否唯一? Limits TimeLimit(ms):2000 MemoryLimit(MB):256 N,Ai∈[1,100] Solution 设dp[i]表示从i位置开始往后分组的情况,dp[i]=0表示无法分组,dp[i]=1表示