POJ 3096 Surprising Strings(STL map string set vector)
题目: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:转载自:http://blog.csdn.net/lyy289065406/article/details/6648624
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <cstdlib>
- #include <cmath>
- #include <map>
- #include <algorithm>
- #define LL __int64
- const int maxn = 1e3 + ;
- using namespace std;
- int main()
- {
- int t, n, sum, v;
- char s[];
- while(~scanf("%d", &t))
- {
- while(t--)
- {
- cin>>n;
- sum = ;
- map<string, int>m1, m2;
- map<string, int>::iterator it;
- while(n--)
- {
- scanf("%s%d", s, &v);
- if(m1[s]==) m1[s] = v;
- else if(m2[s]==)
- {
- m2[s] = v;
- if(m2[s]>m1[s])
- {
- int tmp = m1[s];
- m1[s] = m2[s];
- m2[s] = tmp;
- }
- }
- else
- {
- m2[s] = m2[s]>v?m2[s]:v;
- if(m2[s]>m1[s])
- {
- int tmp = m1[s];
- m1[s] = m2[s];
- m2[s] = tmp;
- }
- }
- }
- for(it = m1.begin(); it != m1.end(); it++)
- sum += it->second;
- for(it = m2.begin(); it != m2.end(); it++)
- sum += it->second;
- cout<<sum<<endl;
- }
- }
- return ;
- }
- /*STL<map>标记*/
- //Memory Time
- //212K 16MS
- #include<iostream>
- #include<string>
- #include<map>
- using namespace std;
- int main(void)
- {
- char s[];
- while(cin>>s && s[]!='*')
- {
- int len=strlen(s);
- if(len<=) //长度小于等于2的串必定是surprising String
- {
- cout<<s<<" is surprising."<<endl;
- continue;
- }
- bool mark=true; //标记s是否为Surprising String
- for(int d=;d<=len-;d++) //d为当前所选取的两个字母之间的距离,d(max)=len-2
- {
- map<string,bool>flag;
- bool sign=true; //标记D-pairs字母对是不是D-unique
- for(int i=;i<=len-d-;i++) //i为所选取的两个字母中第一个字母的下标
- {
- char pair[]={s[i],s[i+d+],'\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 ;
- }
- poj
- 不是我写的代码,贴上是为了参考跌代器
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<map>
- using namespace std;
- struct node
- {
- int a,b;
- double v;
- } g[];
- int main()
- {
- int m,n,i,j,num=;
- double v,dis[];
- char money[],moneyt[];
- while(cin>>n&&n)
- {
- num++,n++;
- map<string,int>mapp;
- map<string,int>::iterator iter; //迭代器
- for(i=; i<n; i++)
- {
- cin>>money;
- mapp.insert(pair<string,int>(money,i));//插入
- }
- cin>>m;
- for(i=; 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,,sizeof(dis));
- dis[]=;
- for(i=; i<n; i++)
- for(j=; 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=;
- for(j=; j<m; j++)
- if(dis[g[j].b]<dis[g[j].a]*g[j].v)
- flag=;
- printf("Case %d: ",num);
- if(flag)
- printf("Yes\n");
- else
- printf("No\n");
- }
- return ;
- }
map的基本操作函数
- //multimap允许重复的键值插入容器
- // **********************************************************
- // * pair只包含一对数值:pair<int,char> *
- // * map是一个集合类型,永远保持排好序的, *
- // pair * map每一个成员就是一个pair,例如:map<int,char> *
- // * map的insert()可以把一个pair对象作为map的参数,例如map<p> *
- // ***********************************************************
- #pragma warning(disable:4786)
- #include<map>
- #include<iostream>
- using namespace std;
- int main(void)
- {
- multimap<int,char*> m;
- //multimap的插入只能用insert()不能用数组
- m.insert(pair<int,char*>(,"apple"));
- m.insert(pair<int,char*>(,"pear"));//apple和pear的价钱完全有可能是一样的
- m.insert(pair<int,char*>(,"banana"));
- //multimap的遍历只能用迭代器方式不能用数组
- cout<<"***************************************"<<endl;
- multimap<int,char*>::iterator i,iend;
- iend=m.end();
- for(i=m.begin();i!=iend;i++)
- {
- cout<<(*i).second<<"的价钱是"
- <<(*i).first<<"元/斤n";
- }
- cout<<"***************************************"<<endl;
- //元素的反相遍历
- multimap<int,char*>::reverse_iterator j,jend;
- jend=m.rend();
- for(j=m.rbegin();j!=jend;j++)
- {
- cout<<(*j).second<<"的价钱是"
- <<(*j).first<<"元/斤n";
- }
- cout<<"***************************************"<<endl;
- //元素的搜索find(),pair<iterator,iterator>equal_range(const key_type &k)const
- //和multiset的用法一样
- multimap<int,char*>::iterator s;
- s=m.find();//find()只要找到一个就行了,然后立即返回。
- cout<<(*s).second<<" "
- <<(*s).first<<endl;
- cout<<"键值等于1的元素个数是:"<<m.count()<<endl;
- cout<<"***************************************"<<endl;
- //删除 erase(),clear()
- m.erase();
- for(i=m.begin();i!=iend;i++)
- {
- cout<<(*i).second<<"的价钱是"
- <<(*i).first<<"元/斤n";
- }
- return ;
- }
- #include <iostream>
- #include <string>
- using namespace std;
- string data;
- bool solve(){
- if(data.size()<)
- return true;
- int i,j;
- for(int cnt=;cnt<data.size();cnt++){
- for(i=;i+cnt<data.size();i++){
- for(j=i+;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 ;
- }
string 的相关博客:http://www.cnblogs.com/aicro/archive/2010/01/15/1642659.html
- #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 = ;i <= str.length() - ; i++)
- {
- check.clear();
- for(j = ;j <= str.length() - - i;j++)
- {
- temp = "";
- temp = str.substr(j,) + str.substr(j + i,);//string 的用法,分别从j开始截取1个字符
- //和从j+i开始截取1个字符 并连接起来
- if(check.count(temp) != )
- {
- 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 == )
- cout << str << " is surprising." << endl;
- else
- {
- d = len - ;//字符的距离范围
- for (i = ; i <= d; i++)//对每一种的距离暴力
- {
- v.clear();
- flag1 = false;
- for (j = ; j < len; j++)
- {
- if (j+i+ >= len) break;
- else
- {
- tmp.clear();
- tmp.push_back(str[j]);
- tmp.push_back(str[j+i+]);
- v.push_back(tmp);
- }
- }
- size = v.size();
- //对结果进行判断,如果有相同的字符串,就立刻退出,不用再往下判断!
- for (k = ; k < size; k++)
- for (l = k+; 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/
POJ 3096 Surprising Strings(STL map string set vector)的更多相关文章
- [ACM] POJ 3096 Surprising Strings (map使用)
Surprising Strings Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5783 Accepted: 379 ...
- POJ 3096 Surprising Strings
Surprising Strings Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5081 Accepted: 333 ...
- POJ训练计划3096_Surprising Strings(STL/map)
解题报告 id=3096">题目传送门 题意: 给一个字符串,要求.对于这个字符串空隔为k取字符对(k=0,1,2,3,4...)要求在同样的空隔取对过程汇总.整个字符串中没有一个同样 ...
- 【字符串题目】poj 3096 Surprising Strings
Surprising Strings Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6193 Accepted: 403 ...
- Surprising Strings(map类)
http://poj.org/problem?id=3096 题意容易理解,开始直接暴力,还是用map写下吧,熟练一下: #include<stdio.h> #include<str ...
- POJ3096:Surprising Strings(map)
http://poj.org/problem?id=3096 for循环真是奇妙! #include <string.h> #include <stdio.h> #includ ...
- POJ 3096:Surprising Strings
Surprising Strings Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6258 Accepted: 407 ...
- POJ 2418 Hardwood Species(STL在map应用)
职务地址:id=2418">POJ 2418 通过这个题查了大量资料..知道了非常多曾经不知道的东西. . .. 在代码中凝视说明吧. 代码例如以下: #include <ios ...
- LeetCode 205 Isomorphic Strings(同构的字符串)(string、vector、map)(*)
翻译 给定两个字符串s和t,决定它们是否是同构的. 假设s中的元素被替换能够得到t,那么称这两个字符串是同构的. 在用一个字符串的元素替换还有一个字符串的元素的过程中.所有字符的顺序必须保留. 没有两 ...
随机推荐
- JS中的!=、== 、!==、===的用法和区别。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 var num = 1; var str = '1'; var test = 1; t ...
- Centos7搭建集中式日志系统
在CentOS7中,Rsyslong是一个集中式的日志收集系统,可以运行在TCP或者UDP的514端口上. 目录 开始之前 配置接收日志的主机 配置发送日志的主机 日志回滚 附件:创建日志接收模板 ...
- 不得不知道的Python字符串编码相关的知识
开发经常会遇到各种字符串编码的问题,例如报错SyntaxError: Non-ASCII character 'ascii' codec can't encode characters in posi ...
- ORA-27102: out of memory并伴随OSD-00031的处理
刚才客户电话过来说有个数据库起不来了,开发商搞了好久搞不掂,得要让我们去帮忙看看.过去到现场,发现数据库无法打开,连nomount模式都不可以.报错的内容大致如下: ORA-27102: out of ...
- Python的注释
任何时候,我们都可以给程序加上注释.注释是用来说明代码的,给自己或别人看,而程序运行的时候,Python解释器会直接忽略掉注释,所以,有没有注释不影响程序的执行结果,但是影响到别人能不能看懂你的代码. ...
- C#中用ILMerge将所有引用的DLL打成一个DLL文件
有些文件是必须一起使用的,如果能把多个DLL打包成一个DLL文件,那么引用文件的时候就不需要一个个地去引用,而且每次移动文件的时候也不至于少了哪个必须的DLL文件. 多个DLL文件打包成一个DLL文件 ...
- 使用Unity拦截一个返回Task的方法
目标 主要是想为服务方法注入公用的异常处理代码,从而使得业务代码简洁.本人使用Unity.Interception主键来达到这个目标.由于希望默认就执行拦截,所以使用了虚方法拦截器.要实现拦截,需要实 ...
- BZOJ 1697: [Usaco2007 Feb]Cow Sorting牛排序
Description 农夫JOHN准备把他的 N(1 <= N <= 10,000)头牛排队以便于行动.因为脾气大的牛有可能会捣乱,JOHN想把牛按脾气的大小排序.每一头牛的脾气都是一个 ...
- [转载]VS2012程序打包部署详解
上篇博客把收费系统的总体设计进行了一遍讲解,讲解的同时掺杂了些有关.NET编译机制的总结.程序编写测试完成后接下来我们要做的是打包部署程序,但VS2012让人心痛的是没有了打包工具.不知道出于什么原因 ...
- python url编码
1.quote:使用适合URL内容的转义序列替换String中的特殊字符. 2.quote_plus:调用quote并使用“+”替换所有空格 3.unquote:使用转义字符的单字符对应物替换'%xx ...