比赛地址:
http://codeforces.com/contest/1025
A题:
题意:给你一串字符串,要求最后把字符串通过一定数量的操作后,变成同一个字母,操作是选择一个字母x(这个字母必须在字符串中出现不止一次),然后把字符串中所有的x变为y(任意字母),这个操作可以进行无限次。问你能否完成要求,能就输出"Yes",否则输出"No"。
思路:读懂题意之后,很容易想到,只要字符串中有一个字母x(在字符串中出现不止一次),那么就可以完成要求,于是很快就撸完代码,过了样例,就交了,结果wa了,瞬间懵了,分析了一下,发现我的方法并没有问题,于是几乎没怎么改,抱着侥幸心理,又交了一发,结果还是wa,然后根据我之前一篇的debug总结,首先检查了输出格式,发现没有区分大小写,于是改了又交了一发,结果还是wa,之后猜想可能是有极限情况没有考虑,看了看提交状况,发现很多人和我一样wa在第四个样例,那么几乎可以确定,第四个样例是一个特殊样例了。然后顺着debug总结,开始想极限情况,才发现当字符串只有一个字母这种特例。改了之后就a了。
总结:前面的三次wa完全是可以避免的,只要我顺着debug总结,一次性把各个步骤检查完毕,就可以a了。这也提醒自己,结果是wa的时候,可能存在不止一处的错误,一定要尽力改全!
代码:
#include
B题:
题意:给你n个对,每个对,有两个数,让你找出一个数,它是每个对的公约数,这里的公约数被重新定义了,若a是(x,y)这一对的约数,只要a是x,y中的任一个的约数就可以了。
思路:由于题目叫Weakened Common Divisor,联想到两个数的公约数,但这里是一些对的公约数,心里想,能否把一个对转化为一个数,把这两个数相乘试试,由于是猜想的,也没去尝试,看了别人的题解,发现这个思路是可行的,直接贴代码吧。
代码:
#include
C题:
题意:
给你一串字符串,问你经过多次操作后,最长的”斑马线"长度是多少,所谓”斑马线"就是一串01串,即题目中bwbw或wbwbw。可以进行的操作是,在字符串中找出一个分割点,然后把两侧的字符串反转,例如 bwwwbww|bw →wwbwwwb|wb→ w|wbwwwbwb →w|bwbwwwbw→ wbwbwwwbw 这个例子答案是5
思路:由于涉及在一个串中找到一个分割点,以及反转,联想到”环“,发现只要在环中找出最长的01串就行,于是可以在把原字符串s,加倍一下,变成s+s,就可以模拟一个环了。
由于涉及转化,所以得注意,转换后得到的答案,是否超出原串的答案范围。本题就有一个wa点,就是最终答案不会超过原串的长度。
代码:
#include
最后:没有人生而垫底,也没有天生就菜!