python join 和 split的常用使用方法

python处理字符串果然厉害…怪不得今年面头条的那个字符串处理的题…没有竞赛经历的同学都能分分钟用py秒掉。。而我(以为语言选了就不能再改)去写c艹。。。写了一年
令人窒息的操作.jpg

参考资料: python join 和 split的常用使用方法

codeforces #342 div 2 B. War of the Corporations

http://codeforces.com/contest/625/problem/B
题意:给出两个字符串,问要替换掉多少个字符才能使得前者中不包含后者。
思路:直接搞…找到一个把收尾替换成‘#’,然后下次从该位置继续开始找,直到找不到。

uva 10785 The Mad Numerologist

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1726
题意:给出26个大写字母的权值,要求构造一个长度为n(n不超过210)的字符串。并且满足奇数位置只能放元音字母,偶数位置只能放辅音字母,且每个元音字母最多放21次,每个辅音字母最多放5次,要求构造的字符串的权值之和最小,在权值最小的前提下字典序最小。

思路:贪心。一开始错误得以为不是完整得不能交换(也就是不完整的字母只能放在最后,这是错误的)。但实际上只要每个字母的数量不变,那么就不影响权值。所以做法是,奇数位置偶数位置分别搞,先把构成字符串的字母按次存入,然后排序一下,输出即可。

uva 10194 Football (aka Soccer)

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1135
题意:给出球队的名字和比赛的信息,得出stanging
思路:字符串处理。需要注意的是多组数据记得初始化多次,以及比较字典序的时候team name是大小写补敏感的。

uva 156 – Ananagrams

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=92
题意:给出一段文字,包含若干个单词,以’#’结束。按照字典序输出所有的ananagrams。所谓ananagram,是指经过任意的重排后,不能得到这段文字中的另一个单词(不区分大小写)
思路:首先是字符串的读入…可以整行读入然后用空格分隔单词。由于补区分大小写,所以要都转化成小写…但是输出的时候要输出原始,所以还记得保留一份。而且要能够通过新的找到原始的(我用了一个toori的map<string,string>来实现)
然后最关键的部分是如何判断两个单词经过重排是否能一样…

我的做法是构造一个hash函数…一个单词的hash值等于对应字母的顺序的平方和…效果还不错?

单词和hash值一一对应…最大也就9E5,可以存的下。然后统计每个hash值出现的次数。对于那些只出现一次的,就是我们要的答案。

还要注意的是输出要按照原始单词的字典序,而不是都变成小写以后的字典序。

所以找到之后可以先找到对应的原始单词存到set里,最后再输出。

 

 

 

uva 409 – Excuses, Excuses!

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=350
题意:给出k个key word,e个借口…找出包含key word最多的借口,即为最坏的借口。匹配补区分大小写&&同一个key word算多次。
思路:需要注意的是因为不区分大小写,需要都转化成大写或者小写。。但是输出的时候要输出原始的。。所以要另外存一份。

hdu 5611 || BC #69 div2 1002 Baby Ming and phone number

http://acm.hdu.edu.cn/showproblem.php?pid=5611
题意:给出n个电话号码(长度为11的字符串),满足特殊条件的价格为a,否则为b.特殊条件为最后5位数字一样,最后5位严格递增或者严格递减,最后8位是一个1980年1月一日到2016年12月31日的合法日期。问最后的价值。

 

思路:直接搞….结果死在cin了。。。原来3E6的cin就会TLE。。。。。q神说1E5有的也会tle…..

所以方案是,能不用cin就不要用cin…

如果要读string的话。。。一个解决办法是把数据流同步关掉(是叫这个名字吗。。)

std::ios::sync_with_stdio(false); 会快很多。。。

还有一个办法是先用scanf读 char[] 然后再转化? 没试过==
哦哦还要注意要判闰年。
还有要开long long

 

 

 

 

 

 

uva 537 Artificial Intelligence?

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=478
题意:给出一段文字。。其中包含了 P,U,I(功率,电压,电流)中的两个。。求第三个。
思路:字符串处理。。第一次用vim复制整段代码。。命令模式下按v,然后光标扫过的区域都会选中,按y就就复制到剪贴板了。。
所以虽然代码写了300行但只有100行是需要写的。。200行复制改下就好==
WA了两次。。一次是因为I写成了小写。。另一次是因为多组数据记得初始化多次。

uva 10010 – Where’s Waldorf?

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=951
题意:给出一个由大小写字母组成的二维maze…给出k个询问。每个询问一个单词。问能否在maze中找到这个单词。不区分大小写。输出开头字母的坐标(从1开始)。如果有多组输出最上面的。如果还有多组,输出最左边的。数据保证至少有一组。
思路:直接找就好了。。。坑的地方是。。。格式。。数据组数之后会有一个空行。然后每两组读入数据之间会有一个空行。。输出的时候每两组数据之间也有一个空行。

我因为一直多输出了一个空行一直wa QAQ

=

uva 401 Palindromes

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=96&page=show_problem&problem=342
题意:问一个字符串是不是回文串,是不是镜像串。镜像串的意思是。。从镜子里看还一样。。给定了一些存在镜像的字母和数字。。
思路:回文串的判断用c++的string要更容易一些。。直接reverse一下。。判断是否相等就行。。。然后需要注意的是。。如果某个字符补存在镜像那么一定不是镜像串

如果某个字符不存在镜像那么一定不是镜像串!

如果某个字符不存在镜像那么一定不是镜像串!

蠢哭惹好么。。。。

 

 

uva 10420 – List of Conquests

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1361
题意:给n个带空格的字符串,第一个单词是国家,统计每个国家的字符串的个数。
思路:getline函数。。。find函数。。。substr函数。。。map…..

codeforces 612 A. The Text Splitting

http://codeforces.com/contest/612/problem/A
水题…直接枚举就好。

codeforces #327 B Rebranding

http://codeforces.com/contest/591/problem/B

题意:给定一个字符串。给出m组替换。对于某一组替换,给出x,y。将字符串中所有的字符x换成y,所有的字符y换成x.
字符串仅包含英文小写字母。

思路: 可以用一个char 到 char 的map 初始映射本身。。 然后进行m次修改。。需要注意的是,每一次修改要修改全部。。因为当进行完i次修改而要进行i+1次修改的时候。。value值为x的可能不止一个。。所以要从a到z都扫一遍。。

 

 

codeforces edu1 B Queries on a String

题意:给一个字符串(1E4),然后给m次操作(m<=300),每次操作是给定一个区间l,r,然后进行k次(k<=1E6)cyclic shift (rotation) 变换。

One operation of a cyclic shift (rotation) is equivalent to moving the last character to the position of the first character and shifting all other characters one position to the right.

For example, if the string s is abacaba and the query is l1 = 3, r1 = 6, k1 = 1 then the answer is abbacaa. If after that we would process the query l2 = 1, r2 = 4, k2 = 2 then we would get the string baabcaa.

 

简单的说。。就是把最后一位移动到第一位,其他位依次往后。

很容易想到,对于一个长度为len的字符串。进行i次变换和进行(i+len)次变换是等价的。

然后直接暴力搞。

offset为偏移量。对于位置i的偏移量为(i-l+len-k)%len,len为每次操作区间的长度。

 

 

(BC 一周年)hdu 5311 Hidden String

http://acm.hdu.edu.cn/showproblem.php?pid=5311
题意:问能否从一个给定的字符串中拿出三个不相交的字串(原串可以有剩余),组成字符串“anniversary”
思路:暴力。

比赛的时候没做出来,sad
我发现我有一个问题,就是不敢跑暴力
有不少题其实正解就是暴力
或者有的题,暴力不是标解,但是绝对可A,可我就不敢写…
就觉得不会是这样..
说到底还是不自信吧…

思路是枚举两个间隔点,将 string tar=”anniversary”分成三个不为空的部分
然后在给的字符串中按顺序查找这三部分
如果都能找到,直接YES
如果任何一种间隔的分段都无法YES 就NO…

妈蛋,if语句后面多写了个分号,调了半个多小时才发现(为啥总是这种傻逼错误….)
还有一点,因为是多组数据,而对于每组数据,将tar拆分的方法都是一样的,可以先预处理一下存到数组里.