1004:一开始做的时候在想能否求出从i开始的第一段能满足条件的子串,ans++,然后ans再加上该子串与前面的所有不相交的子串,因为两个满足条件可以连接起来构成新的子串,不过这还得满足连续的条件,想来想去还是搞不了。
其实标称给的思路挺好的,只要记录每次前面所有子串的余数,再把所有余数为0的子串数相加就是答案。开个二维的数组,count[i][r]表示以i结尾的余数为r的子串个数。
count[i][r+e[digit[i]]*number[i]]=sum{count[i-1][r];因为是尾插
但是得考虑两种情况:
1.单独由number[i]构成的串
2.重叠的串 count[i][s*e[digit[i]]*number[i]]--;因为在增加i的时候,i以前可能已经在串里了
最后想了下,确实不太好写,就算有思路,还得各种处理,唉~~~代码功底差了点
代码:http://blog.csdn.net/qq415200973/article/details/9955995
1006:构造满足条件的题吧,Special Charge。这题一开始看不懂,大概一小时后才稍微动点吧,其实只要考虑每个数据库的第一个和第二个服务器。然后m,n的大小关系不清楚,最后分情况讨论了下:
1.m<n,比较容易,第一个服务器从1-m,第二个选n就行。
2.m=n,只要每一条都错开一个就行,比如第一行是1,2,3,4,那么第二行就是2,3,4,1因为如果其中有一个爆了的话,那么有一个就要用两次。
3.m>n,这个比较难想吧,还是mz给的思路。
n=4,m=8
1,4
2,4
3,4
4,3
1,3
2,3
3,2
4,2
代码:http://blog.csdn.net/qq415200973/article/details/9956105