poj3007(set的应用)
题意:从给定的字符串中的任意一个位置进行分割,得到两个子串;其中子串为S1,其反串为S3,;子串S2,反串为S5。问任意两个子串组合有多少种方法?
但是有限制就是:子串不能和其反串组合。
//方法一:
其中涉及到unique的使用,这也是在看了大神使用uniuqe之后才使用的,也是不错。
unique():返回参数数组中所有不同的值,并按照从小到大排序(主要是为了去重)
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<set>
#include<cstdio>
#include<map>
#include<string.h>
using namespace std;
typedef long long ll;
const int maxx=1e3+10;
string s;
set<string>st;
int main(){int t;cin>>t;string s1,s2,s3,s5,s6[maxx];while(t--){cin>>s;getchar();int j=0;int len=s.length();for(int i=1;i<len;i++){s1=s.substr(0,i);s2=s.substr(i,len-i);s3=s1;s5=s2;reverse(s3.begin(),s3.end());reverse(s5.begin(),s5.end());s6[j++]=s1+s2; s6[j++]=s2+s1; s6[j++]=s5+s3; s6[j++]=s3+s5; s6[j++]=s1+s5; s6[j++]=s5+s1; s6[j++]=s2+s3; s6[j++]=s3+s2; }sort(s6,s6+j);int cnt=unique(s6,s6+j)-s6;cout<<cnt<<endl;}return 0;
}
方法二:(超时)
set的使用就不用讲了。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<set>
#include<cstdio>
#include<map>
#include<string.h>
using namespace std;
typedef long long ll;
string s;
set<string>st;
int main(){int t;cin>>t;string s1,s2,s3,s5,s6;while(t--){cin>>s;getchar();int len=s.length();for(int i=1;i<len;i++){s1=s.substr(0,i);s2=s.substr(i,len-i);s3=s1;s5=s2;reverse(s3.begin(),s3.end());reverse(s5.begin(),s5.end());s6=s1+s2; if(st.find(s6)==st.end()){st.insert(s6);}s6=s2+s1; if(st.find(s6)==st.end()){st.insert(s6);}s6=s5+s3; if(st.find(s6)==st.end()){st.insert(s6);}s6=s3+s5; if(st.find(s6)==st.end()){st.insert(s6);}s6=s1+s5; if(st.find(s6)==st.end()){st.insert(s6);}s6=s5+s1; if(st.find(s6)==st.end()){st.insert(s6);}s6=s2+s3; if(st.find(s6)==st.end()){st.insert(s6);}s6=s3+s2; if(st.find(s6)==st.end()){st.insert(s6);}}int size=st.size();cout<<size<<endl;st.clear();}return 0;
}
poj3007(set的应用)相关推荐
- POJ3007 Organize Your Train part II
Hash表来做,key值,链地址法.key公式等于字符串中所有字符asc2码乘对应位数的和 需要的函数 1.将s拆分为s1,s2 2.反转字符串 3.俩字符串合并 4.计算k值 5.建立并生成hash ...
- poj-3007 Organize Your Train part II
题意很好理解,看图都能懂,就不解释了.关键就在于训练计划上的分类,神马标准模板库的应用都是骗人的,不过小用一点也是能过的,不过时间就是800,900的.总之一点也不用c++库函数就稳稳的对.本人是用的 ...
- 做acm 需要学的算法
做acm 需要学的算法 转一个搞ACM需要的掌握的算法. 要注意,ACM的竞赛性强,因此自己应该和自己的实际应用联系起来. 适合自己的才是好的,有的人不适合搞算法,喜欢系统架构,因此不要看到别人什 ...
- acm经典题Mark
著名的北邮ACM推荐50题 POJ推荐50题 1.标记"难"和"稍难"的题目可以看看,思考一下,不做要求,当然有能力的同学可以直接切掉. 2.标记为A and ...
- 嗷嗷嗷,kuangbin大大博客上拉的题
正在学(learning),未学(waiting),已学(cut vovering) 初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj ...
- C++ ACM解题
部分解题报告添加新内容,除了原有的"大致题意"和"解题思路"外, 新增"Source修正",因为原Source较模糊,这是为了帮助某些狂WA ...
- 假期ACM训练计划表
OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094) 初期: 一 ...
- [转载]acm进阶之路
第一阶段:练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码, 因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打 出来. 1.最短路(Floyd ...
- acm常见算法及例题
1 acm常见算法及例题 2 3 初期: 4 一.基本算法: 5 (1)枚举. (poj1753,poj2965) 6 (2)贪心(poj1328,poj2109,poj2586) 7 (3)递归和分 ...
最新文章
- 【Android 逆向】Dalvik 函数抽取加壳 ( Dalvik 下的函数指令抽取与恢复 | dex 函数指令恢复时机点 | 类加载流程 : 加载、链接、初始化 )
- Interview:算法岗位面试—上海某公司算法岗位(偏图像算法,互联网科技行业)技术面试考点之区块链的TPS等问题
- Linux下python升级安装步骤
- CSS+JS灰色树型菜单导航代码
- Exception in thread main java.lang.NoClassDefFoundError: org/apache/tez/dag/api/TezConfiguration
- JSON.parse()、eval()和JSON.stringify()
- 深度学习(三十八)卷积神经网络入门学习(2.0)
- CMSIS-SVD Schema File Ver. 1.0
- 经典排序算法-MFC实现之3:冒泡排序
- 教你怎么短期内备考并通过PMP考试!
- android移动开发慕课版本_Android移动开发基础教程(慕课版)
- 【ML】机器学习(西瓜书)思维导图
- CMUX协议学习总结
- git创建版本库并提交文件
- 计算机基础知识学习顺序
- 系统重温Pandas笔记:(八)文本数据
- built a JNCIS LAB系列:Chapter 7 MPLS
- 【JAVASE】泛型基础
- 视频转语音,语音转文字
- Linux下查看网络设备类型