题目链接:https://codeforces.com/contest/1156/problem/B

题意:给一段字符串,通过变换顺序使得该字符串不包含为位置上相邻且在字母表上也相邻的情况,并输出。

思路:可以把该字符串的奇字符和偶字符按字典序分别组成字符串s1,s2,然后判断s1+s2和s2+s1是否满足条件,若都不满足则输出“No answer”。可以模拟一下,当s1+s2和s2+s1都不满足即最大奇字符和最小偶字符相差不为1且最大偶字符和最小奇字符相差不为1,是无法找到满足条件的字符串的。

AC代码:

#include<bits/stdc++.h>
using namespace std; int T,a[];
char s[]; int main(){
scanf("%d",&T);
while(T--){
char s1[],s2[];
int cnt1=,cnt2=;
memset(a,,sizeof(a));
scanf("%s",s);
int len=strlen(s);
for(int i=;i<len;++i)
++a[s[i]-'a'];
for(int i=;i<;i+=)
if(a[i]){
for(int j=;j<a[i];++j)
s1[cnt1++]='a'+i;
}
for(int i=;i<;i+=)
if(a[i]){
for(int j=;j<a[i];++j)
s2[cnt2++]='a'+i;
}
if(abs(s1[cnt1-]-s2[])!=){
for(int i=;i<cnt1;++i) printf("%c",s1[i]);
for(int i=;i<cnt2;++i) printf("%c",s2[i]);
printf("\n");
continue;
}
if(abs(s2[cnt2-]-s1[])!=){
for(int i=;i<cnt2;++i) printf("%c",s2[i]);
for(int i=;i<cnt1;++i) printf("%c",s1[i]);
printf("\n");
continue;
}
printf("No answer\n");
}
return ;
}

最新文章

  1. Intellij IDEA 13.1.3 使用Junit4
  2. php 使用函数中遇到的坑之----list
  3. Spark优化之二:集群上运行jar程序,状态一直Accepted且不停止不报错
  4. js canvas压缩图片上传
  5. jquery 平滑锚
  6. dubbo main方法启动
  7. ubuntu下gcc、g++和gfortran版本切换
  8. PHP性能分析 - ngnx日志分析
  9. TransactionScope 事务使用说明
  10. ectouch第五讲 之表
  11. 某deed笔试题
  12. STL priority_queue sort 自定义比较终极模板
  13. (IOS)CoreLocation 和 MapKit 的应用
  14. php基础八(cookie)
  15. bzoj 3528: [Zjoi2014]星系调查
  16. Android Studio配置设置
  17. Malab 常用数学函数
  18. day12 python学习 装饰器
  19. 风险管理,未雨绸缪——《代码之殇》读书笔记II
  20. node中一个基本的HTTP客户端向本地的HTTP服务器发送数据

热门文章

  1. 【leetcode】1262. Greatest Sum Divisible by Three
  2. @ApiParam和@RequestHeader接收参数的区别
  3. 什么是CSS 表单?
  4. 千万级别数据量mysql优化策略
  5. Nowcoder 北师校赛 B 外挂使用拒绝 ( k次前缀和、矩阵快速幂打表找规律、组合数 )
  6. TTTTTTTTTTT POJ 2749 修牛棚 2-Sat + 路径限制 变形
  7. 我不熟悉的map
  8. AcWing:108. 奇数码问题(归并排序 + 逆序数)
  9. git介绍以及一些常用命令,加上vim编辑器的简单使用
  10. springBoot 整合 mybatis 项目实战