易位构词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 }
时间: 2024-08-30 01:45:20

易位构词EOJ3451【字符串】【思维题】【模拟】的相关文章

No.49 Anagrams[易位构词]

No.49 Anagrams Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be in lower-case. Tags: Hash Table String 难点: 1.没有读清题意,对易位构词的理解不到位 2.题意不明了.输入为一系列字符串,别与回文记混淆了 3.第一次见到,不是很了解,完全没思路 具体分析: 易位构词:两个单词所包含的字符和数量

HDU5414——字符串思维题——CRB and String

http://acm.hdu.edu.cn/showproblem.php?pid=5414 /************************************************ * Author :Powatr * Created Time :2015-8-21 10:45:46 * File Name :1009.cpp ************************************************/ #include <cstdio> #include &

ZOJ 3829 贪心 思维题

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3829 现场做这道题的时候,感觉是思维题,自己智商不够,不敢搞,想着队友智商好,他们搞吧,但是没出来这题...... 以后任何时候,都自信点....该想的还是好好自己想,这类题感觉就是先去找性质,然后一点点找规律,如果必要的话,自己提出一点猜想,然后如果自己举不出来反例,就暂时认为是正确的 下午搞了一下午,发现还是悲剧,晚上参考了两个题解 http://blog.csdn.

Unique Encryption Keys (思维题 预处理)

题目 题意:给m个数字, q次询问, 询问b到e之间如果有重复数字就输出, 没有就输出OK 思路:用f[i]数组 记录从i开始向后最近的有重复数字的 位置, 如 1 3 2 2, 则f[1] = 4; 如果离a最近的重复数字的位置 都大于b, 就说明没有重复数字. f[]数组需要预处理,从后向前. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <vector>

sdut 2847 Monitor (思维题)

题目 题意:给定a, b, x, y;  求使c, d; 使c:d = x :y; 且c<=a, d<=b, 而且c, d尽量大. 先求最小倍数, 再用最小倍数乘 x, y; 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 using namespace std; 6 7 long long gcd(long long a, l

1001 字符串“水”题

1001: 字符串“水”题 时间限制: 1 Sec  内存限制: 128 MB提交: 210  解决: 39[提交][状态][讨论版] 题目描述 给出一个长度为 n 的字符串(1<=n<=100000),求有多少个连续字串中所有的字母都出现了偶数次. 输入 第一行一个正整数 T,表示数据组数(1 <= T <= 10). 接下来 T 行,每行有一个只包含小写字母的字符串. 输出 每个答案输出满足要求字符串个数.每个答案占一行. 样例输入 3 a aabbcc abcabc 样例输出

hdu 4972 A simple dynamic programming problem (转化 乱搞 思维题) 2014多校10

题目链接 题意:给定一个数组记录两队之间分差,只记分差,不记谁高谁低,问最终有多少种比分的可能性 分析: 类似cf的题目,比赛的时候都没想出来,简直笨到极点..... 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <cmath> 6 #include <vector> 7 #include &

学习方法_2011年编写和锻炼的思维题

1.多看,多练,多想,多总结,最重要就是不停的写代码! 给自己的目标:一天代码量最少800行,无论是什么代码,如果练习的量不够,就重复做已经写过的代码. 思维题: 找出这当中数字 1,11,31,4113,612314 的规律是怎样的? 1,11,表示前面的数有1个131,表示前面所有的数有3个14113,表示前面的所有的数有4个1.1个3以此类推,前面所有的数有6个1.2个3.1个4,即为612314 1.两个无窗的房间,其中一间有三个电灯,另一间里面有三个开关,三个开关各控制三个电灯.问:每

思维题 URAL 1718 Rejudge

题目传送门 1 /* 2 题意:数据加10组,再删掉第6组数据,问rejudge后最少最多几个作者收到邮件 3 思维题:当错在6时结果是不一定,错在7时是一定改变,因为会变成6 4 思路没错,但用结构题排序一直WA,代码有毒!学习使用set容器. 5 */ 6 #include <cstdio> 7 #include <algorithm> 8 #include <cstring> 9 #include <cmath> 10 #include <str