http://acm.ecnu.edu.cn/problem/3451/

官方题解:

我们可以先考虑字符串有序的情况,比如是 aaabcc,我们只要将字符串右移 3 位,变成 bccaaa,就做完了。那么对于无序的情况,我们可以通过排序让它有序,做完之后再排回去。

显然最多的字母出现次数大于一半的情况是不行的。否则就将每个字母的位置和字母绑定一下,按字母序对结构体进行排序。然后右移「出现最多的字母出现次数」位,再排回来就可以了。

当时没想到这是模拟,看题解不知道如果是无序的排完序后怎样弄回去。。。。

其实结构体记录数组的下标id是不变的!!!做完再排回去就是排id啊啊啊啊!

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<cmath>
 6 using namespace std;
 7 const int maxn=1e5+100;
 8
 9 struct Ch
10 {
11     char c;
12     int id;
13 };
14 Ch c[maxn];
15 int total[30];
16
17 bool cmp1(const Ch&A,const Ch&B)
18 {
19     if(A.c==B.c) return A.id<B.id;
20     return A.c<B.c;
21 }
22
23 bool cmp2(const Ch&A,const Ch&B)
24 {
25     return A.id<B.id;
26 }
27
28 int main()
29 {
30     char s[maxn];
31     while(scanf("%s",s)==1)
32     {
33         memset(total,0,sizeof(total));
34         int len=strlen(s);
35         int m=0;
36         for(int i=0; i<len; i++)
37         {
38             c[i].c=s[i];
39             c[i].id=i;
40             total[s[i]-'a']++;
41             m=max(m,total[s[i]-'a']);
42         }
43         if(m>len/2)
44         {
45             printf("impossible\n");
46         }
47         else
48         {
49             sort(c,c+len,cmp1);
50             char tmp[maxn];
51             for(int i=0; i<len; i++) tmp[i]=c[i].c;
52             for(int i=0; i<len; i++)
53             {
54                 c[i].c=i-m>=0?tmp[i-m]:tmp[i+len-m];
55             }
56             sort(c,c+len,cmp2);
57             for(int i=0; i<len; i++) printf("%c",c[i].c);
58             printf("\n");
59         }
60     }
61     return 0;
62 }

转载于:https://www.cnblogs.com/zxhyxiao/p/8017919.html

易位构词EOJ3451【字符串】【思维题】【模拟】相关推荐

  1. 3451. 易位构词

    单点时限: 2.0 sec 内存限制: 256 MB 易位构词 (anagram),指将一个单词中的字母重新排列,原单词中的每个字母都出现有且仅有一次.例如 "unce" 可以被易 ...

  2. COW(暴力枚举) + 玄神的字符串(思维题) + Duplicate Strings(字符串思维题)

    '只要坚持就会成功--2022.1.22' 1.COW,这道题的大概意思就是求出一个字符串中一共有多少个COW,不要求连续. 思路: 暴力枚举,枚举每一个包含O,看这个O和前后的C,W结合能组成多少个 ...

  3. 字符串——BZOJ 3097: Hash Killer I【构造题,思维题】

    BZOJ 3097: Hash Killer I[构造题,思维题] 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3097 题意:让你出一组 ...

  4. 今夕何年 模拟 思维题

    今天是2017年8月6日,农历闰六月十五. 小度独自凭栏,望着一轮圆月,发出了"今夕何夕,见此良人"的寂寞感慨. 为了排遣郁结,它决定思考一个数学问题:接下来最近的哪一年里的同一个 ...

  5. little w and Soda(思维题)

    链接:https://ac.nowcoder.com/acm/contest/297/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  6. codeforces 有意思的思维题 1 ~ 15

    codeforces 思维题 1.给定数组,求满足i < j and ai * aj = i + j的数对数量 2.第 i 步向前跳 i 步或后退 1 步 3.给两个点,求正方形的另两个点 4. ...

  7. 2022电力电缆判断题模拟考试平台操作

    题库来源:安全生产模拟考试一点通公众号小程序 2022电力电缆操作考试题为电力电缆复审题库的多种练习模式!2022电力电缆判断题模拟考试平台操作根据电力电缆考试大纲.电力电缆考试模拟题通过安全生产模拟 ...

  8. ZOJ 3829 贪心 思维题

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3829 现场做这道题的时候,感觉是思维题.自己智商不够.不敢搞,想着队友智商 ...

  9. (十三)真题模拟【告诉你答案是什么】

    真题模拟 面试真题 讲解前提示 何为变量提升 var和let const的区别 typeof返回哪些类型 列举强制类型转换和隐式类型转换 手写深度比较 isEqual 手写深度比较,模拟lodash ...

最新文章

  1. Win8 x64 + Office Word 2013 x64 无法自动加载 Endnote X6 的解决方案
  2. ID3、C4.5、C5.0、CART决策树区别
  3. nodejs 从TCP套接字读取并解析数据
  4. UIButton的竖排图片和文本
  5. 编程语言大比拼——谁的效率高
  6. Java语言中几个常用的包
  7. Hive日期格式转换
  8. 使用.net开发并生成Windows服务安装包
  9. atitit.避免NullPointerException 总结and 最佳实践 o99
  10. 爬取QQ好友列表或定位QQ好友秘密
  11. WinDriver 驱动安装err e000024b,err e000022f解决办法
  12. PHP项目集成支付宝PC端扫码支付API(国内支付)
  13. 银行项目企业网银转账对私转账功能的测试点
  14. ipad键盘使用快捷键_每个iPad使用者都应该知道的20个键盘快捷键
  15. nagios通过python获取ESXi硬盘SMART信息
  16. 在声音制作中的几个压缩器使用问题,你知道几个呢?
  17. android学音标软件,英语音标学习助手
  18. 用户故事与敏捷方法—用户角色(实战一)
  19. verdi直接打开list文件
  20. 微博、知乎、今日头条如何打响内容第三次世界大战?

热门文章

  1. 蓝桥杯 ALGO-10 算法训练 集合运算
  2. LeetCode 29. Divide Two Integers
  3. mysql随机取5条数据_【转】mysql实现随机获取几条数据的方法
  4. 字符数组查找-----拉手笔试
  5. [Java]Java MVC 分层概念(转)
  6. iOS: 教你给UI控件添加Badge(消息提醒小圆点)
  7. canvas绘图粒子扩散效果【原创】
  8. xx学OD -- 内存断点(上)
  9. Smartmail外贸CRMBuild1.0版系统白皮书
  10. Part 3 —— 发布 Go Modules