Topcoder SRM 630div 2
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的更多相关文章
- TopCoder SRM 560 Div 1 - Problem 1000 BoundedOptimization & Codeforces 839 E
传送门:https://284914869.github.io/AEoj/560.html 题目简述: 定义"项"为两个不同变量相乘. 求一个由多个不同"项"相 ...
- Topcoder SRM 643 Div1 250<peter_pan>
Topcoder SRM 643 Div1 250 Problem 给一个整数N,再给一个vector<long long>v; N可以表示成若干个素数的乘积,N=p0*p1*p2*... ...
- Topcoder Srm 726 Div1 Hard
Topcoder Srm 726 Div1 Hard 解题思路: 问题可以看做一个二分图,左边一个点向右边一段区间连边,匹配了左边一个点就能获得对应的权值,最大化所得到的权值的和. 然后可以证明一个结 ...
- TopCoder SRM 667 Div.2题解
概览: T1 枚举 T2 状压DP T3 DP TopCoder SRM 667 Div.2 T1 解题思路 由于数据范围很小,所以直接枚举所有点,判断是否可行.时间复杂度O(δX × δY),空间复 ...
- Topcoder Srm 673 Div2 1000 BearPermutations2
\(>Topcoder \space Srm \space 673 \space Div2 \space 1000 \space BearPermutations2<\) 题目大意 : 对 ...
- Topcoder Srm 671 Div2 1000 BearDestroysDiv2
\(>Topcoder \space Srm \space 671 \space Div2 \space 1000 \space BearDestroysDiv2<\) 题目大意 : 有一 ...
- [topcoder]SRM 646 DIV 2
第一题:K等于1或者2,非常简单.略.K更多的情况,http://www.cnblogs.com/lautsie/p/4242975.html,值得思考. 第二题:http://www.cnblogs ...
- [topcoder]SRM 633 DIV 2
第一题,http://community.topcoder.com/stat?c=problem_statement&pm=13462&rd=16076 模拟就可以了. #includ ...
- TopCoder<SRM>上的一道1100分的题目解析附代码
首先我们来简单看一下这道题的statement Problem Statement Note that in the following problem statement, all quo ...
随机推荐
- IntentService 串联 按顺序执行(此次任务执行完才执行下一个任务)
IntentService与Service的最大区别就是前者依次执行,执行完当前任务才执行下一个任务,后者并发执行 在IntentService里面不写onCreate方法 MainActivity: ...
- delphi 更改不了窗体的标题
delphi定义变量名千万要注意,不能和关键字同名,今天我无意间定义了一个caption的变量 导致我怎么都不能修改窗的标题.
- 第六章 管理类型(In .net4.5) 之 创建类型
1. 概述 本章内容包括 C#5中如何更好的创建类型以及如何扩展现有类型. 2. 主要内容 2.1 如何选择类型 C#类型系统包括三种类型:值类型.引用类型.指针类型.(指针类型用于非托管代码,很少使 ...
- R语言的字符串处理
R语言字符串的拼接 content<-paste("124235","789","124",sep="@") 运行 ...
- Android请求返回417解决办法
今天碰到个很奇怪的问题,APP通过代理链接服务器会收到HTTP 417错误,经过网上查找发现是由于以下代码造成: HttpParams params = new BasicHttpParams(); ...
- Oracle用户密码过期问题解决
一.用户密码即将过期,导致autotrace无法打开 如果用户密码即将过期,在登录数据库时会收到如下提示: ERROR: ORA-2800 ...
- 一个.net程序员教你使用less
我是一个.net 程序员,虽然说一直做后台,但是web 前端也会去学,虽然说技术只是层窗户纸,但是像我这种多动症患者,不捅破我心难受啊! 好!废话不多提,下面直接正题,至于less 是什么这里不多讲因 ...
- Object C学习笔记2-NSLog 格式化输出数据
1 . 几种常用类型变量声明 int i =10; BOOL isShow=YES; BOOL isShow=1; float f = 3.1415926; char a =120; NSString ...
- php正则表达式获取表格内容
<?php $contents = '<tr class=""> <td>508982</td> <td>08,07,01,0 ...
- verilog实现16位五级流水线的CPU带Hazard冲突处理
verilog实现16位五级流水线的CPU带Hazard冲突处理 该文是基于博主之前一篇博客http://www.cnblogs.com/wsine/p/4292869.html所增加的Hazard处 ...