(原创)Codeforces Round #550 (Div. 3) A Diverse Strings
1 second
256 megabytes
standard input
standard output
A string is called diverse if it contains consecutive (adjacent) letters of the Latin alphabet and each letter occurs exactly once. For example, the following strings are diverse: "fced", "xyz", "r" and "dabcef". The following string are not diverse: "az", "aa", "bad" and "babc". Note that the letters 'a' and 'z' are not adjacent.
Formally, consider positions of all letters in the string in the alphabet. These positions should form contiguous segment, i.e. they should come one by one without any gaps.
You are given a sequence of strings. For each string, if it is diverse, print "Yes". Otherwise, print "No".
The first line contains integer nn (1≤n≤1001≤n≤100), denoting the number of strings to process. The following nn lines contains strings, one string per line. Each string contains only lowercase Latin letters, its length is between 11 and 100100, inclusive.
Print nn lines, one line per a string in the input. The line should contain "Yes" if the corresponding string is diverse and "No" if the corresponding string is not diverse. You can print each letter in any case (upper or lower). For example, "YeS", "no" and "yES" are all acceptable.
8
fced
xyz
r
dabcef
az
aa
bad
babc
Yes
Yes
Yes
Yes
No
No
No
No 解题思路:这道题就是给你一串字符串,判断其是否符合题意,如果它是连续且不出现重复则符合,输出Yes,否则输出No;
解法一:直接对字符串排序;
代码如下:
#include<iostream>
#include<map>
#include<algorithm>
#include<string.h>
using namespace std; int n ;
string s ;
int flag1 = ;
int flag2 = ;
int a[];
int count1 = ;
map<char,int>mp; //用于记录是否有重复的字母;
int main()
{
cin>>n;
while(n--)
{
flag1 = ; //flag1是用于标记是否有重复的,现在假设没有重复的,置flag=1;
flag2 = ; //flag2是用于记录是否连续;
cin>>s;
sort(s.begin(),s.end()); //将字符串排序; for(int i = ; i < s.size();i++)
{
mp[s[i]]++; //看是否有重复的;先记录下每个字母的个数;
}
for(int i = 'A'-'';i <= 'Z'-'';i++)
{
if(mp[i]>) //字母有重复;
{
flag1 = ; //将flag1 置为0;
mp[i] = ;
} }
for(int i = ; i < s.size() ;i++)
{
if((s[i]-'')!=(s[i-]-'')+) //判断是否连续;如果不连续就是相邻的Ascall码相差不为1;
{
flag2 = ; //不连续则将flag2 置为0;
}
}
if(flag1==||flag2==) //如果字母重复或者字母不连续;
{
cout<<"No"<<endl;
}else
cout<<"Yes"<<endl;
}
return ;
}
解法二:不利用头文件带的函数,将字符串转为数字再进行数字的排序再存进另一个字符串;这个是刚刚比赛的时候写的,忘记了字符串可以直接排序,所以在思考字符串怎么排序;
就想到可以先转为数字排序再放进另一个字符串;
代码如下:
#include<iostream>
#include<map>
#include<algorithm>
#include<string.h>
using namespace std; int n ;
string s ;
map<char,int>mp;
int flag1 = ;
int flag2 = ;
int a[];
int count1 = ;
string t;
int main()
{
cin>>n;
while(n--)
{
count1 = ;
flag1 = ; //用于标记是否重复;
flag2 = ; //用于标记是否连续;
cin>>s;
for(int i = ; i < s.size();i++)
{
a[i] = s[i]-''; //将字符串每位转为数字;
count1++; //并计算该数字数组的长度;
}
sort(a,a+count1); //对数字进行排序;
t = "";
for(int i = ; i < count1 ;i++)
{
t.push_back(a[i]+''); //将数字转为字符放入另一个字符串;
}
for(int i = ; i < s.size();i++)
{
mp[s[i]]++; //记录每个字母出现的个数;
}
for(int i = 'A'-'';i <= 'Z'-'';i++)
{
if(mp[i]>) //如果出现重复;
{
flag1 = ; //将flag1 置为0 ;
mp[i] = ;
} }
for(int i = ; i < t.size() ;i++)
{
if((t[i]-'')!=(t[i-]-'')+) //如果不连续;就是相邻的Ascall码相差不为1;
{
flag2 = ; //将flag2 置为0;
}
}
if(flag1==||flag2==) //如果有重复或者不连续;
{
cout<<"No"<<endl;
}else
cout<<"Yes"<<endl;
}
return ;
}
(原创)Codeforces Round #550 (Div. 3) A Diverse Strings的更多相关文章
- Codeforces Round #275 (Div. 2) C - Diverse Permutation (构造)
题目链接:Codeforces Round #275 (Div. 2) C - Diverse Permutation 题意:一串排列1~n.求一个序列当中相邻两项差的绝对值的个数(指绝对值不同的个数 ...
- Codeforces Round #486 (Div. 3) A. Diverse Team
Codeforces Round #486 (Div. 3) A. Diverse Team 题目连接: http://codeforces.com/contest/988/problem/A Des ...
- Codeforces Round #275 (Div. 1)A. Diverse Permutation 构造
Codeforces Round #275 (Div. 1)A. Diverse Permutation Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 ht ...
- 构造 Codeforces Round #275 (Div. 2) C. Diverse Permutation
题目传送门 /* 构造:首先先选好k个不同的值,从1到k,按要求把数字放好,其余的随便放.因为是绝对差值,从n开始一下一上, 这样保证不会超出边界并且以防其余的数相邻绝对值差>k */ /*** ...
- CodeForces Round #550 Div.3
http://codeforces.com/contest/1144 A. Diverse Strings A string is called diverse if it contains cons ...
- (原创)Codeforces Round #550 (Div. 3) D. Equalize Them All
D. Equalize Them All time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- Codeforces Round #275(Div. 2)-C. Diverse Permutation
http://codeforces.com/contest/483/problem/C C. Diverse Permutation time limit per test 1 second memo ...
- Codeforces Round #550 (Div. 3) F. Graph Without Long Directed Paths
F. Graph Without Long Directed Paths time limit per test 2 seconds memory limit per test 256 ...
- D. Equalize Them All Codeforces Round #550 (Div. 3)
D. Equalize Them All time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
随机推荐
- QString 乱谈(1)
一个月前尝试写了一篇关于QStringLiteral,存盘时MoinMoin罢工了.吸取一点经验,还是写成短篇吧 可是,可是,QString不就是简简单单一个字符串么?能有什么可谈的.真的么... ( ...
- Solaris Tips: Repairing the Boot Archive (ZT)
http://www.seedsofgenius.net/solaris/solaris-tips-repairing-the-boot-archive 注意以下是系统盘非镜像情况下的操作,如果系统盘 ...
- java 多线程系列基础篇(六)之线程让步
1. yield()介绍 yield()的作用是让步.它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执行权:但是,并不能保证在当前线程调用yield()之后,其 ...
- 问题:web.net页面超时;结果:设置ASP.NET页面的运行超时时间详细到单个页面及站点
设置ASP.NET页面的运行超时时间详细到单个页面及站点 这篇文章主要介绍了如何设置ASP.NET页面的运行超时时间,包括全局超时时间.单个站点超时时间.单个页面请求超时时间,需要的朋友可以参考下 全 ...
- 问题:sqlserver有没有类似Oracle的LISTAGG;结果: 灵活运用 SQL SERVER FOR XML PATH
灵活运用 SQL SERVER FOR XML PATH FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前 ...
- Mysql Hive 通用的行列转换
就是简单的一个字符串拼接,意义和所用场景自己体会下 insert into table agent_library1 select concat_ws(':',collect_set(name)) a ...
- [Python Study Notes]物体运动检测
基于opencv的cv2模块实现 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...
- 关联查询 join的使用
#!/usr/bin/env python import sqlalchemy from sqlalchemy import create_engine from sqlalchemy.ext.dec ...
- IE6中浮动双边距bug
想要创建出漂亮的网页设计, 除了要认真学习每一个html和CSS代码之外,不可能不去了解一下臭名昭著的IE6和更早的那些IE浏览器的坏脾气,因为你本来写出的规规矩矩的代码, 漂亮的设计就此就要完成了, ...
- 【总结整理】JS的继承
参考阮一峰的文章:http://javascript.ruanyifeng.com/oop/inheritance.html#toc4 function Shape() { this.x = 0; t ...