摘要:
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4662题解: 首先U全部转化为三个I(本质),M又只能在开头。所以就是在乎I的个数问题了。 如果仅仅有扩倍,则I的个数为2^n个,如果中间某次去了K个两个U ,I的个数就为2^n-6*k, 再下次无论是扩倍还是减6,都还是可以表示为2^n-6*k. 所以必要条件找到了,那就是num(I)=2^n-6*k 有整数解,再看充分性,一旦可以表示为这种形式,我们就扩倍n次,然后做k次去两个U的操作,充分性得证。 考虑这个不定方程。 首先2^k mod6 是周期数列1,2,4,2,4....所以必要条件是I= 阅读全文
摘要:
题目地址:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2662思想: 1 先把每个概率乘起来,然后乘以可充排列的种数。 2 先一开始用(n1+n2+n3+...+nk)! / (n1! *n2! * n3!*...*nk!) 来算,sb了 因为用BigInteger太慢了~ 这个数是可以很大很大的, 50!呀。但是这个数可以拆成组合数的乘积: c[n1+n2+..+nk][n1] *c[n2+n3+..nk][ 阅读全文
摘要:
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1861 一个研究生入学考试上机题==b思路: 将信息放在结构体里,然后存在向量中, 最后扫描到n==0就统计,输出,清空向量。 需要注意的是 1 同一艘船可能出租两次,于是扫描到op=='E' 时,就要立马处理。 2 扫描到op=='E' 时 ,还要看是否有S的记录,如果没有找到就不处理 3 从00:00 -> 00:00 算是借了一分钟~ 而不是差值0分钟 4 字符串和整数之间转化 用stringstream ,#includ... 阅读全文
摘要:
题目地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1733初始化时,需要计算所有的f[0][i] 和 f[i][0] , 状态转方程是 f[i][j]= if (a[i]==b[j] ) f[i-1][j-1]+1 else max(f[i-1][j],f[i][j-1]) 数组开大一点· 【100】【100】 是错了的代码:#include #include
using namespace std; int f[1000][1000]; int max(int a,int b)
{ if(a>b 阅读全文
摘要:
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4611题解:显然一个个求和时会以lcm(a,b)为周期,但是一旦a,b公因子比较少,这样也还是会超时的, i++这个跨度太小. 注意到如果mod a的序列在上升,mod b的序列也在上升,则ans+= 的那个值是不变的,这样我们就可以增加跨度了。 考虑从i开始的跨度为jump的序列时,只需要去 a-i%a ,b-i%b的较小值就可以了。 最后注意一下i+jump不可以超过边界,一旦超过,我们把i赋值成很大,这样保证会退出去就可以了#include
#include
using namespace s 阅读全文