POJ 3096 Surprising Strings(STL map string set vector)
2013-08-02 15:30
393 查看
题目:http://poj.org/problem?id=3096
题意:给定一个字符串S,从中找出所有有两个字符组成的子串,每当组成子串的字符之间隔着n字符时,如果没有相同的子串出现,则输出 "S is surprising." ,
反之,则输出 "S is NOT surprising." 。 例如 AABA 把它分成两个字符为一个整体的,1..相邻两个字符 AA,AB,BA 没有相同的; 2.隔一个字符的 AB AA 没有相同; 3.隔两个字符的 AA 没有相同
map:转载自:/article/1968953.html
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数
map相关博客:http://www.uml.org.cn/c++/200912111.asp
http://blog.163.com/sd_2618/blog/static/85162685201032922624439/
string
转载自:http://blog.csdn.net/chen_zhipeng/article/details/7883120
string 的相关博客:http://www.cnblogs.com/aicro/archive/2010/01/15/1642659.html
set
vector
转自:http://blog.csdn.net/yzl_rex/article/details/7647532
vector知识:http://blog.163.com/lee_020/blog/static/12475560201242152530509/
http://blog.csdn.net/phoebin/article/details/3864590
http://blog.sina.com.cn/s/blog_9f1c0931010180cy.html
题意:给定一个字符串S,从中找出所有有两个字符组成的子串,每当组成子串的字符之间隔着n字符时,如果没有相同的子串出现,则输出 "S is surprising." ,
反之,则输出 "S is NOT surprising." 。 例如 AABA 把它分成两个字符为一个整体的,1..相邻两个字符 AA,AB,BA 没有相同的; 2.隔一个字符的 AB AA 没有相同; 3.隔两个字符的 AA 没有相同
map:转载自:/article/1968953.html
/*STL<map>标记*/ //Memory Time //212K 16MS #include<iostream> #include<string> #include<map> using namespace std; int main(void) { char s[80]; while(cin>>s && s[0]!='*') { int len=strlen(s); if(len<=2) //长度小于等于2的串必定是surprising String { cout<<s<<" is surprising."<<endl; continue; } bool mark=true; //标记s是否为Surprising String for(int d=0;d<=len-2;d++) //d为当前所选取的两个字母之间的距离,d(max)=len-2 { map<string,bool>flag; bool sign=true; //标记D-pairs字母对是不是D-unique for(int i=0;i<=len-d-2;i++) //i为所选取的两个字母中第一个字母的下标 { char pair[3]={s[i],s[i+d+1],'\0'}; //构成D-pairs字母对 if(!flag[ pair ]) flag[ pair ]=true; else { sign=false; //存在相同的D-pairs,该字母对不是D-unique break; } } if(!sign) { mark=false; //存在非D-unique,s不是Surprising String break; } } if(mark) cout<<s<<" is surprising."<<endl; else cout<<s<<" is NOT surprising."<<endl; } return 0; }
poj 2240 不是我写的代码,贴上是为了参考跌代器 #include<iostream> #include<cstdio> #include<cstring> #include<map> using namespace std; struct node { int a,b; double v; } g[3500]; int main() { int m,n,i,j,num=0; double v,dis[3500]; char money[10000],moneyt[10000]; while(cin>>n&&n) { num++,n++; map<string,int>mapp; map<string,int>::iterator iter; //迭代器 for(i=1; i<n; i++) { cin>>money; mapp.insert(pair<string,int>(money,i));//插入 } cin>>m; for(i=0; i<m; i++) { scanf("%s %lf %s",money,&v,moneyt); iter=mapp.find(money); g[i].a=iter->second; g[i].v=v; iter=mapp.find(moneyt); g[i].b=iter->second; } memset(dis,0,sizeof(dis)); dis[1]=1; for(i=2; i<n; i++) for(j=0; j<m; j++) if(dis[g[j].b]<dis[g[j].a]*g[j].v) dis[g[j].b]=dis[g[j].a]*g[j].v; int flag=0; for(j=0; j<m; j++) if(dis[g[j].b]<dis[g[j].a]*g[j].v) flag=1; printf("Case %d: ",num); if(flag) printf("Yes\n"); else printf("No\n"); } return 0; }
map的基本操作函数
C++ Maps是一种关联式容器,包含“关键字/值”对begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数
map相关博客:http://www.uml.org.cn/c++/200912111.asp
http://blog.163.com/sd_2618/blog/static/85162685201032922624439/
string
转载自:http://blog.csdn.net/chen_zhipeng/article/details/7883120
#include <iostream> #include <string> using namespace std; string data; bool solve(){ if(data.size()<3) return true; int i,j; for(int cnt=1;cnt<data.size();cnt++){ for(i=0;i+cnt<data.size();i++){ for(j=i+1;j+cnt<data.size();j++){ if(data[i]==data[j] && data[i+cnt]==data[j+cnt]) return false; } } } return true; } int main(){ while(cin>>data,data!="*"){ if(solve()) cout<<data<<" is surprising."<<endl; else cout<<data<<" is NOT surprising."<<endl; } return 0; }
string 的相关博客:http://www.cnblogs.com/aicro/archive/2010/01/15/1642659.html
set
#include<iostream> #include<set> #include<string> using namespace std; int main() { set<string> check; string str; string temp; int i,j; while(cin>>str && str != "*") { bool flag = false; for(i = 1;i <= str.length() - 1; i++) { check.clear(); for(j = 0;j <= str.length() -1 - i;j++) { temp = ""; temp = str.substr(j,1) + str.substr(j + i,1);//string 的用法,分别从j开始截取1个字符 //和从j+i开始截取1个字符 并连接起来 if(check.count(temp) != 0) { flag = true; break; } check.insert(temp); } if(flag == true) break; } if(flag == false) cout<<str<<" is surprising."<<endl; else cout<<str<<" is NOT surprising."<<endl; } }
vector
转自:http://blog.csdn.net/yzl_rex/article/details/7647532
//这题的测试数据很水,以为下面的做法会超时的!呵呵! 题意:在一个字符串中,给出一些字符间的距离,然后 //让你根据这距离再重新组成字符串,检查是否有相同的字符串存在! #include <iostream> #include <string> #include <vector> using namespace std; vector<string> v; int main() { string str, tmp; int i, len, d, j, size, k, l; bool flag1, flag2; while (cin >> str) { if(str == "*") break; len = str.length(); flag2 = false; if (len == 1) cout << str << " is surprising." << endl; else { d = len - 2;//字符的距离范围 for (i = 0; i <= d; i++)//对每一种的距离暴力 { v.clear(); flag1 = false; for (j = 0; j < len; j++) { if (j+i+1 >= len) break; else { tmp.clear(); tmp.push_back(str[j]); tmp.push_back(str[j+i+1]); v.push_back(tmp); } } size = v.size(); //对结果进行判断,如果有相同的字符串,就立刻退出,不用再往下判断! for (k = 0; k < size; k++) for (l = k+1; l < size; l++) { if (v[k] == v[l]) { flag1 = true; break; } } if (flag1) { cout << str << " is NOT surprising." << endl; flag2 = true; break; } } if (!flag2) cout << str << " is surprising." << endl; } } system("pause"); }
vector知识:http://blog.163.com/lee_020/blog/static/12475560201242152530509/
http://blog.csdn.net/phoebin/article/details/3864590
http://blog.sina.com.cn/s/blog_9f1c0931010180cy.html
相关文章推荐
- stl几个(set map vector string)用法
- c++ stl 使用汇总(string,vector,map,set)
- STL中string、vector、list、deque、set、map 的区别
- 在STL中基本容器有: string、vector、list、deque、set、map
- STL中: string、vector、list、deque、set、map 的区别
- STL中: string、vector、list、deque、set、map 的区别
- STL中基本容器string、vector、list、deque、set、map之间的区别
- STL中基本容器string,vector,list,deque,set,map之间的区别
- 在STL中基本容器有: string、vector、list、deque、set、map
- STL几个(set map vector string)用法
- STL 基本容器 : string、vector、list、deque、set、map 的区别
- STL几个(set map vector string)用法
- STL中: string、vector、list、deque、set、map 的区别(转)
- STL中的容器使用比较(string vector list deque set map)
- STL基本用法【vector】【map】【string】【set】
- Surprising Strings poj 3096 map的运用
- 在STL中基本容器string、vector、list、deque、set、map之间的区别
- stl几个(set map vector string)用法
- STL中: string、vector、list、deque、set、map 的区别
- STL学习:STL库vector、string、set、map用法