20170127总结—冯德靖
140127测试
第一题 : Niven数
使用gets 整行读入,再分别将进制N与数字转换为int类型,最后再将N进制数转换为对应的十进制数,用得到的数modN进制数各位之和等于0输出yes,不等于0输出no。
注意事项:N进制数与十进制数的转换。
第二题:最长子串
使用gets整行读入,在分离D与字符串,使用for循环,从可使用的最长字符串开始,依次对半分,并判定两侧相同的字符,只要有不相等的,则N++,最后如果得到的N小于等于D,则输出对应长度(空格)字符串并结束程序;如果此长度所有情况都不成立,则将字符串长度减二,再重复。
注意事项:时间复杂度为N的三次方;由于判定是从左往右,从长到短,所以不需要考虑多解。(PS:编译过程中由于像(k<=n;k++)之类的写为(k<+n;k++)或(k<=n;n++)等细节错误导致编译了很久)
第三题:传递信息
本想使用SPFA,但由于不知道起点需要将每个点例举为起点而使时间复杂度增加,估计会超时,所以放弃。
解法:建立单向图(题中提到两个人相互联系的时间不一定相等),使用floyd求出最短路,再分别举出每个人的最短路并判断是否能联通所有人,不能则将最短路赋为一个较大值,最后得到传递时间最小的人和时间。
第四题:选数问题
考虑到排序再分组的问题,但没想到二分,最后用for循环超时。
注意事项:除了二分还是二分………..