ACM训练半周总结—11月2日

来源:互联网 发布:影楼美工设计教程 编辑:程序博客网 时间:2024/06/10 03:01

        这个周感受颇多的,icpc继续进行着,还是努力吧,明年我也想让自己有一个好结果。

        这半个周还是在尽力做题,整理一下吧。

        Q题:给出一个数n,找出一串数,a1,a2,,,an,令lcm(a1,a2,,,,an)=n,求最小的a1+a2+,,,an。

        有定理知,任何一个正整数都可以被素数分解,那么n=(a1^p1)(a2^p2),,,(an^pn),很显然这里的a1,a2,,,an的lcm必定是n,而且a1+a2+,,,将是最小的,因为不按这几个数分解也必定是这几个数的乘积组合,必定比这几个素数很分解的大,所以只要分解n的素数记起来就好了。

       J题:(这道题好长时间都没调通,最后是发现最后一步没使用大数加减,失去了一血QAQ),就是求S=(1^1)+(2^2)+(3^3)+...(n^n),求S的个位是什么数。    这道题其实很明显任何一个数的连乘个位的变化都是有规律的,打一下表就不难发现,其实答案是以20位为规律的,但注意本题大坑,输入的数是2*10^100严重超范围所以,这就用到了大数加减乘除取模来进行运算。

        L题:就是给两个数low和hig,找出区间内只以一个素数为因子的数有几个,很明显素数的次方数必定只以该素数为因子,就先筛选出素数,然后依次处理,

         U题:就是定义

         f(n)=     if(n%10>0){f(n)=n%10}   if(n==0){f(n)=0}   if(n%10==0) f(n)=f(n/10) ,求f(q)-f(p-1),这个题感觉就是推规律,很容易就发现规律,比如234,这个数有23个10组成,必定有23个(1+2+..10=45),然后看小于234的十位数像10,20,,,在看百位,依次往上,但不要忘了还有个4,。因此,234除10的23余4,(ans+=23*45+(1+2+3+4)),23除10得2余3,(ans+=45*2+(3+2+1)),2除10的0余2(ans+=45*0+(2+1)),就是了。

          从这道题感觉还是太不熟练,退了好长时间。。。

        S题:就是给出L,S,用L个字母升序组成权值为S的情况有多少种。其实就是用1到26相加组成S,但数只能是升序,故只能使用一次,且最多L<=26,那么S<=351,假设a1+a2+...aL=S  (a1<a2<...aL),因为有升序的规定其实aL也已经受到限制了,刚开始先考虑a1的情况没推出来,后来反着先考虑aL,所以发现这貌似是dp题,设f[L][S][e]表示L长度,组成S数,末尾是e,的组合有f种,那么f[L][S][e]=sum(f[L-1][S-t][t])(0<=t<e),最后还要把所有的不同e的组合f累加起来。代码注意S-t别小于0,代码可用用已知值推前面的情况。

        

原创粉丝点击