易位构词EOJ3451【字符串】【思维题】【模拟】
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【字符串】【思维题】【模拟】相关推荐
- 3451. 易位构词
单点时限: 2.0 sec 内存限制: 256 MB 易位构词 (anagram),指将一个单词中的字母重新排列,原单词中的每个字母都出现有且仅有一次.例如 "unce" 可以被易 ...
- COW(暴力枚举) + 玄神的字符串(思维题) + Duplicate Strings(字符串思维题)
'只要坚持就会成功--2022.1.22' 1.COW,这道题的大概意思就是求出一个字符串中一共有多少个COW,不要求连续. 思路: 暴力枚举,枚举每一个包含O,看这个O和前后的C,W结合能组成多少个 ...
- 字符串——BZOJ 3097: Hash Killer I【构造题,思维题】
BZOJ 3097: Hash Killer I[构造题,思维题] 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3097 题意:让你出一组 ...
- 今夕何年 模拟 思维题
今天是2017年8月6日,农历闰六月十五. 小度独自凭栏,望着一轮圆月,发出了"今夕何夕,见此良人"的寂寞感慨. 为了排遣郁结,它决定思考一个数学问题:接下来最近的哪一年里的同一个 ...
- little w and Soda(思维题)
链接:https://ac.nowcoder.com/acm/contest/297/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- codeforces 有意思的思维题 1 ~ 15
codeforces 思维题 1.给定数组,求满足i < j and ai * aj = i + j的数对数量 2.第 i 步向前跳 i 步或后退 1 步 3.给两个点,求正方形的另两个点 4. ...
- 2022电力电缆判断题模拟考试平台操作
题库来源:安全生产模拟考试一点通公众号小程序 2022电力电缆操作考试题为电力电缆复审题库的多种练习模式!2022电力电缆判断题模拟考试平台操作根据电力电缆考试大纲.电力电缆考试模拟题通过安全生产模拟 ...
- ZOJ 3829 贪心 思维题
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3829 现场做这道题的时候,感觉是思维题.自己智商不够.不敢搞,想着队友智商 ...
- (十三)真题模拟【告诉你答案是什么】
真题模拟 面试真题 讲解前提示 何为变量提升 var和let const的区别 typeof返回哪些类型 列举强制类型转换和隐式类型转换 手写深度比较 isEqual 手写深度比较,模拟lodash ...
最新文章
- Win8 x64 + Office Word 2013 x64 无法自动加载 Endnote X6 的解决方案
- ID3、C4.5、C5.0、CART决策树区别
- nodejs 从TCP套接字读取并解析数据
- UIButton的竖排图片和文本
- 编程语言大比拼——谁的效率高
- Java语言中几个常用的包
- Hive日期格式转换
- 使用.net开发并生成Windows服务安装包
- atitit.避免NullPointerException 总结and 最佳实践 o99
- 爬取QQ好友列表或定位QQ好友秘密
- WinDriver 驱动安装err e000024b,err e000022f解决办法
- PHP项目集成支付宝PC端扫码支付API(国内支付)
- 银行项目企业网银转账对私转账功能的测试点
- ipad键盘使用快捷键_每个iPad使用者都应该知道的20个键盘快捷键
- nagios通过python获取ESXi硬盘SMART信息
- 在声音制作中的几个压缩器使用问题,你知道几个呢?
- android学音标软件,英语音标学习助手
- 用户故事与敏捷方法—用户角色(实战一)
- verdi直接打开list文件
- 微博、知乎、今日头条如何打响内容第三次世界大战?
热门文章
- 蓝桥杯 ALGO-10 算法训练 集合运算
- LeetCode 29. Divide Two Integers
- mysql随机取5条数据_【转】mysql实现随机获取几条数据的方法
- 字符数组查找-----拉手笔试
- [Java]Java MVC 分层概念(转)
- iOS: 教你给UI控件添加Badge(消息提醒小圆点)
- canvas绘图粒子扩散效果【原创】
- xx学OD -- 内存断点(上)
- Smartmail外贸CRMBuild1.0版系统白皮书
- Part 3 —— 发布 Go Modules