Topcoder SRM 630div 2
A:不断的消除两个相邻的相等字符,简单题。
真心不习惯STL。。
#include<iostream> #include <string> #include <vector> using namespace std; class DoubleLetter {public:string ableToSolve(string S) {while (1){int flag=0;for (int i=1;i<S.size();i++)if (S[i]==S[i-1]){S.erase(i-1,2);flag=1;}if (!flag||S.size()==0) break;}if (S.size()==0) 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[12345]; int dis[12][12]; int mp[12][12];class Egalitarianism3Easy {public:int maxCities(int n, vector <int> a, vector <int> b, vector <int> len) {memset(dis,0x3f3f3f,sizeof(dis));for (int i=1;i<=n;i++) dis[i][i]=0;for (int i=0;i<a.size();i++) dis[a[i]][b[i]]=dis[b[i]][a[i]]=len[i];for (int k=1;k<=n;k++)for (int i=1;i<=n;i++)for (int j=1;j<=n;j++)dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);int Max=1;for (int i=1;i<(1<<n);i++){vector<int> V;V.clear();for (int j=0;j<n;j++)if (((i>>j)&1)==1) V.push_back(j+1);int m=V.size();int same=dis[V[0]][V[m-1]];int flag=1;for (int k=0;k<m;k++)for (int j=0;j<m;j++)if (k!=j&&dis[V[k]][V[j]]!=same){flag=0;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[100];int p[100],a[100];//注意P:表示字符串排完序后,所对应原来数组的下标// A:表示原先字符串在排序后的下标// 这里很绕,熟悉后缀数组的应该了解char c[100];string smallerOne(string s) {for (int i=0;i<s.size();i++)arr[i]=&s[i];//保存后缀sort(arr,arr+s.size());int len=s.size();for (int i=0;i<s.size();i++){p[i]=len-arr[i].size();a[len-arr[i].size()]=i;}a[len]=-1;c[p[0]]='a';for (int i=1;i<len;i++){if (a[p[i-1]+1]<a[p[i]+1]) c[p[i]]=c[p[i-1]];//这个表示:我们确定位置为p[i]的字符,//如果当前字符串s1,与后面的字符串s2(都是排序后的字符串)//比较它们后面+1的字符串的大小。这里可以忽视我的解释else c[p[i]]=c[p[i-1]]+1;}string ans;for (int i=0;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 0; }
转载于:https://www.cnblogs.com/forgot93/p/3931479.html
Topcoder SRM 630div 2相关推荐
- Topcoder SRM 697题解
Topcoder SRM 697题解 D1L1 分子分母同乘a[i]: \(a_{i}^{b_{i}+1} mod \prod a_i = 0\) 然后我们考虑质因子p,设质因子p在a[i]中出现cn ...
- Topcoder Srm 671 Div2 1000 BearDestroysDiv2
\(>Topcoder \space Srm \space 671 \space Div2 \space 1000 \space BearDestroysDiv2<\) 题目大意 : 有一 ...
- topcoder srm 714 div1
problem1 link 倒着想.每次添加一个右括号再添加一个左括号,直到还原.那么每次的右括号的选择范围为当前左括号后面的右括号减去后面已经使用的右括号. problem2 link 令$h(x) ...
- [Topcoder SRM 590]Fox And City(网络流建模)
题面 问题描述: 一个国家有n个城市,编号为0~n-1.编号为0的城市是首都.该国的道路网形成无向连通图.换句话说:城市之间通过双向路径连接. 对于每个城市,至少有一条从该城市到首都的路径(path) ...
- topcoder srm 691 div1 -3
1.给定一个$n$个顶点$n$个边的图,边是$(i,a_{i})$,顶点编号$[0,n-1]$.增加一个顶点$n$,现在选出一个顶点集$M$,对于任意的在$M$中 的顶点$x$,去掉边$(x,a_{x ...
- Topcoder SRM 663 DIV 1
ABBADiv1 题意: 规定两种操作,一种是在字符串的末尾添加A,另一种是在末尾添加B然后反转字符串.现在给你一个起始串,一个终点串,然后问你是否能够通过以上两种操作,从起始串变为终点串. 题解: ...
- Topcoder SRM 657DIV2
前言: 像我这样一直在DIV2的弱菜..不知道说什么了. A:一定判断有8个'R',每行 每列只有一个 B题:大概是 int E,int EM,int M,int MH,int H 然后EM可以给值 ...
- topcoder srm 706 div1
1.给定一个迷宫,点号表示不可行,井号表示可行.现在可以改变其中的一些井号的位置.问最少改变多少个井号可以使得从左上角到右下角存在路径. 思路:设高为$n$,宽为$m$,若井号的个数$S$小于$n+m ...
- topcoder srm 694 div1 -3
1.给出$n$个数字,将其分成三个非空的组,每组的权值为该组所有数字的抑或.选择一种分法使得三组的权值和最大? 思路:记录前两组的权值且三组有没有数字时第三组的值.(当前两组的值知道时第三组的权值是确 ...
最新文章
- 树的高度(小米2017秋招真题)
- Transformer 眼中世界 Vs. CNN 眼中世界
- 高效的CSS(2008年7月4日更新)
- 【正一专栏】欧洲五大联赛猜想(一)德法意班霸集结寻求欧冠突破
- ML之预测:玩转2018世界杯—采用机器学习预测小组赛、十六比赛、四决赛、半决赛、决赛以及世界杯总冠军的各个队伍
- 视频 + PPT 下载 | 《财富管理数字化转型现状与趋势洞察报告》解读第一讲
- ssh连接+执行系统命令
- Windows 中自定义Error Codes
- python 多个列表合并_Python实现合并两个列表的方法分析
- Spring MVC 原理 - DispatcherServlet调用完整过程
- windows用户态程序的Dump
- iOS开源项目周报0302
- jquery日期和时间的插件精确到秒
- C# 选择文件(读取文件时)、选择路径(保存文件时)
- Android 开启热点 适配8.0以上
- 国家药监局打印不了(打印插件一直弹框)
- pareto最优解程序_求多目标优化问题Pareto最优解集的方法
- 计算机复试问题总结(一)
- 谷歌安卓以AAB替换APK安装包
- Blender常用快捷键整理