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. android中常用菜单(menu)的基本知识

    (一)选项菜单 1.简单的创建菜单: @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMe ...

  2. Toast提示信息

    用Toast来作为操作成功以及用户误操作等等的提示,非常的简单.直接上代码: 创建方式一: ps: 此处没有设置toast的其他属性,均使用默认的风格(个人觉得默认的风格除了字体比较小之外 还是挺好看 ...

  3. MySQL线上执行大事务或锁表操作

    前提 在线执行一些大事务或锁表操作(给某个核心级表加一列或者执行修改操作),此时不但主库从库要长时间锁表,主从延迟也会变大.未避免大事务sql对整个集群产生影响,,我们希望一条SQL语句只在Maste ...

  4. Learning Scrapy笔记(一)- Scrapy简单介绍

    Scrapy简述 Scrapy十一个健壮的,用来从互联网上抓取数据的web框架,Scrapy只需要一个配置文件就能组合各种组件和配置选项,并且Scrapy是基于事件(event-based)的架构,使 ...

  5. USB设备驱动

    在Linux 内核中,使用usb_driver 结构体描述一个USB 设备驱动,usb_driver 结构体的定义如代码清单20.11 所示.代码清单20.11 usb_driver 结构体 stru ...

  6. 第二章 管理程序流(In .net4.5) 之 管理多线程

    1. 概述 本章包括同步资源以及取消长时间任务相关的内容. 2. 主要内容 2.1 同步资源 ① lock关键字实现.会阻塞程序,有可能会导致死锁. ② volatile关键字可以禁用编译优化,用于避 ...

  7. 3.第一个python程序

    学习任何一门语言的第一步,首先要写个'hello world',这算是程序员的一个传统.但在写之前,还有注意几个问题. 首先,python是一门脚本语言,而脚本语言的特点就是:我们写的代码会先由解释器 ...

  8. stm32f103 SPI单线TX发数据来驱动LCD

    有一黑白LCD,有CS/SI/SCK三线,时序满足SPI时序,但STM32的SPI有四线NSS/MOSI/SCK/MISO,这里MISO没有用到.因此可以使用SPI的单线发送模式进行驱动LCD. 关键 ...

  9. R语言的字符串处理

    R语言字符串的拼接 content<-paste("124235","789","124",sep="@") 运行 ...

  10. Oracle 错误代码

    ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出 ...