A:不断的消除两个相邻的相等字符,简单题。

真心不习惯STL。。

#include<iostream>
#include <string>
#include <vector>
using namespace std;
class DoubleLetter {
public:
string ableToSolve(string S) {
while (){
int flag=;
for (int i=;i<S.size();i++)
if (S[i]==S[i-])
{
S.erase(i-,);
flag=;
}
if (!flag||S.size()==) break;
}
if (S.size()==) return "Possible";
else return "Impossible";
}
}; // Powered by FileEdit
// Powered by TZTester 1.01 [25-Feb-2003]
// Powered by CodeProcessor

B:给出有N个节点一棵树,求在M个两两的点距离相等求出最大的M值(N<=10);

先FLoyd求出所有点与点之间的距离。

然后用类似状态压缩DP的方式枚举满足的方案。

然后比较出最大值。

#include<iostream>
#include <string>
#include <vector>
#include<string.h>
using namespace std;
int b[];
int dis[][];
int mp[][]; class Egalitarianism3Easy {
public:
int maxCities(int n, vector <int> a, vector <int> b, vector <int> len) {
memset(dis,0x3f3f3f,sizeof(dis)); for (int i=;i<=n;i++) dis[i][i]=; for (int i=;i<a.size();i++) dis[a[i]][b[i]]=dis[b[i]][a[i]]=len[i]; for (int k=;k<=n;k++)
for (int i=;i<=n;i++)
for (int j=;j<=n;j++)
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]); int Max=;
for (int i=;i<(<<n);i++)
{
vector<int> V;
V.clear();
for (int j=;j<n;j++)
if (((i>>j)&)==) V.push_back(j+); int m=V.size();
int same=dis[V[]][V[m-]];
int flag=; for (int k=;k<m;k++)
for (int j=;j<m;j++)
if (k!=j&&dis[V[k]][V[j]]!=same)
{
flag=;
break;
}
if (flag) Max=max(Max,m);
}
return Max;
}
};

C:很锻炼思维的题目。

参考他人的做法:

用类似后缀数组的方式。

只是数组套数组真心醉了。

我的方案是求出满足跟S一样序号的最小的字符串,然后比较与S的值.

代码中有详细注释。

#include<iostream>
#include <string>
#include <vector>
#include<string.h>
#include<algorithm>
using namespace std;
class SuffixArrayDiv2 {
public:
string arr[];
int p[],a[];
//注意P:表示字符串排完序后,所对应原来数组的下标
// A:表示原先字符串在排序后的下标
// 这里很绕,熟悉后缀数组的应该了解
char c[];
string smallerOne(string s) {
for (int i=;i<s.size();i++)
arr[i]=&s[i];//保存后缀
sort(arr,arr+s.size()); int len=s.size();
for (int i=;i<s.size();i++){
p[i]=len-arr[i].size();
a[len-arr[i].size()]=i;
}
a[len]=-;
c[p[]]='a';
for (int i=;i<len;i++){
if (a[p[i-]+]<a[p[i]+]) c[p[i]]=c[p[i-]];
//这个表示:我们确定位置为p[i]的字符,
//如果当前字符串s1,与后面的字符串s2(都是排序后的字符串)
//比较它们后面+1的字符串的大小。这里可以忽视我的解释
else c[p[i]]=c[p[i-]]+;
}
string ans;
for (int i=;i<len;i++) ans+=c[i];
if (ans<s) return "Exists";
else return "Does not exist"; }
}; int main()
{
SuffixArrayDiv2 b;
string s;
cin>>s;
cout<<b.smallerOne(s);
return ;
}

Topcoder SRM 630div 2的更多相关文章

  1. TopCoder SRM 560 Div 1 - Problem 1000 BoundedOptimization & Codeforces 839 E

    传送门:https://284914869.github.io/AEoj/560.html 题目简述: 定义"项"为两个不同变量相乘. 求一个由多个不同"项"相 ...

  2. Topcoder SRM 643 Div1 250<peter_pan>

    Topcoder SRM 643 Div1 250 Problem 给一个整数N,再给一个vector<long long>v; N可以表示成若干个素数的乘积,N=p0*p1*p2*... ...

  3. Topcoder Srm 726 Div1 Hard

    Topcoder Srm 726 Div1 Hard 解题思路: 问题可以看做一个二分图,左边一个点向右边一段区间连边,匹配了左边一个点就能获得对应的权值,最大化所得到的权值的和. 然后可以证明一个结 ...

  4. TopCoder SRM 667 Div.2题解

    概览: T1 枚举 T2 状压DP T3 DP TopCoder SRM 667 Div.2 T1 解题思路 由于数据范围很小,所以直接枚举所有点,判断是否可行.时间复杂度O(δX × δY),空间复 ...

  5. Topcoder Srm 673 Div2 1000 BearPermutations2

    \(>Topcoder \space Srm \space 673 \space Div2 \space 1000 \space BearPermutations2<\) 题目大意 : 对 ...

  6. Topcoder Srm 671 Div2 1000 BearDestroysDiv2

    \(>Topcoder \space Srm \space 671 \space Div2 \space 1000 \space BearDestroysDiv2<\) 题目大意 : 有一 ...

  7. [topcoder]SRM 646 DIV 2

    第一题:K等于1或者2,非常简单.略.K更多的情况,http://www.cnblogs.com/lautsie/p/4242975.html,值得思考. 第二题:http://www.cnblogs ...

  8. [topcoder]SRM 633 DIV 2

    第一题,http://community.topcoder.com/stat?c=problem_statement&pm=13462&rd=16076 模拟就可以了. #includ ...

  9. TopCoder<SRM>上的一道1100分的题目解析附代码

    首先我们来简单看一下这道题的statement Problem Statement      Note that in the following problem statement, all quo ...

随机推荐

  1. Javascript 插件统一的实现步骤

    步骤: // 1. 定义立即调用的函数 +function($){ "use strict"; //使用严格模式ES5支持 //后续步骤 // 2. xx 插件类及原型方法的定义 ...

  2. [转]SQLServer 2008以上误操作数据库恢复方法——日志尾部备份

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/8491327 问题: 经常看到有人误删数据,或者误操作,特别是update和delete的 ...

  3. SHOW SLAVE STATUS几个常见参数

    --显示当前读取的Master节点二进制日志文件和文件位置,对应线程I/O thread Master_Log_File: mysql-bin.000011 Read_Master_Log_Pos: ...

  4. SQL基础学习篇--字符函数

    字符函数可与SELECT,UPDATE,DELETE RIGHT()----从右侧开始选择  SELECT RIGHT(列,字符数量) FROM 表 LEFT()----从左侧开始选择  SUBSTR ...

  5. PAT乙级真题1001. 害死人不偿命的(3n+1)猜想 (15)(解题)

    卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反复砍下去,最后一定在某一步得到n=1.卡拉兹在1950年的世界数 ...

  6. 手动书写小代码-foreach实现机制

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.C ...

  7. linux安装ruby

    可以使用 sudo apt-get install ruby 的方式安装,但一般这种方式安装的版本比较旧.另外也可以用以下方式安装新的版本. 1. 首先更新软件源,使用国内的.参考:http://wi ...

  8. OpenStack: 安装准备

    >安装准备1. 安装MySQL# apt-get install python-mysqldb mysql-server将/etc/mysql/my.cnf修改bind-address为&quo ...

  9. Eclipse基金会

    昨天Eclipse基金会庆祝其成立十周年.2004年2月的新闻稿宣布该非盈利组织的正式成立,由包括开发者.消费者和插件提供商在内的各独立团体组成的董事会,为Eclipse的长期发展负责. 基金会成立时 ...

  10. 微价值:专访《甜心爱消除》的个人开发者Lee,日入千元

    [导语] 我们希望能够对一些个人开发者进行专访,这样大家更能显得接地气,看看人家做什么,怎么坚持.<甜心爱消除>作者Lee是三群的兄弟,也关注微价值.微价 值的文章还是可以的,得到一些业内 ...