(原创)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 ...
随机推荐
- vijos1369:难解的问题
描述 在你的帮助下,蔚蓝来到了埃及.在金字塔里,蔚蓝看到了一个问题,传说,能回答出这个问题的人就能受到埃及法老的祝福,可是蔚蓝日夜奋战,还是想不出来,你能帮帮他么?(XXX: 胡扯,教主怎么可能想不出 ...
- UCOSII下外部中断的实现
1.外部中断初始化函数 // EXTI initialize void EXTIX_INIT(void) { EXTI_InitTypeDef EXTI_InitStructure; //定义外部中断 ...
- PV 和 UV IP
PV(page view),即页面浏览量,或点击量;通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标. 高手对pv的解释是,一个访问者在24小时(0点到24点)内到底看了你网站几个页面.这里 ...
- maven 学习 十 关于打包
clean package -Dmaven.test.skip=true -P product 这个命令干的活: 清class文件,打包构建,跳过测试,注意最后一个 -P product, 会激活项目 ...
- mjpg-streamer移植
本文的copyright归yuweixian4230@163.com 所有,使用GPL发布,可以自由拷贝,转载.但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途. 作者:yuweix ...
- Python多进程-进程间数据的传递
两个进程间的数据是独立的,要进行数据传递的话可通过几个方法 Queue 通过队列来进行进程间数据的传递 # -*- coding:utf-8 -*- __author__ = "MuT6 S ...
- 11-10SQLserver基础--数据库之视图
视图 视图实际就是对表的连接展现出来的结果建成的虚拟表.简单来说,视图实际上就是一个虚拟的表,通过表与表之间的关系连接起来,方便查询时使用. 首先,将需要连接的语句存储到数据库中,定义新的视图名代替连 ...
- oracle --(二)分区(extent)
基本关系:数据库---表空间---数据段---分区---数据块 一.分区(extent)分区extent是比数据块大一级的存储结构,是几个逻辑上相邻的data block的组合.我们知道,物理存储通常 ...
- php中使用array_reduce给数组降维
PHP里面最强大的工具,就是数组,它融合了多种数据结构的特点,数组.队列.栈.哈希表等等,而且容器可以兼容各种类型,任意嵌套,简直无所不能.围绕着数组,PHP原生支持了一些列的函数,使得数组在实际编程 ...
- apaache php 日记设计
有个客户服务器是用apache搭建的,最近总是感觉站很慢,服务器很慢很卡,有时候甚至网 站都打不开,后来经过排查分析原来是里面的access.log和error.log这两个文件要经常上去看,和清理, ...