8.11

做了两天全国赛的题,今天终于做了一套相对水一点的题目。


北京市选的三道题,应该难度是倒序的。


第一题:给出几种面值的硬币,问要凑成某个面额,最少需要多少硬币。这题在1000000范围内的显然可以暴力DP  f[i]=min(f[i],f[i-a[j]]+1)来处理,这个F数组在i非常大的时候,它一定会用最大的那个a[i]来更新,这个数组会变得趋于稳定,有个类似循环节的东西(如下图),于是题解就是小于1000000的暴力处理,大于1000000的用1000000以内的数+若干的a[i]来更新即可

这题在考试的时候我没有想到预处理,想O(nt)的方法想了两个半小时,进坑了。。导致后面比较简单的第三题没有时间写了.



第二题很明显是道数学题。已知  phi(y)=x,已知x,求最小的y.

  这道题在考试的时候就比较有想法,也写了90分。假如y=p1c1(p1的c1次方)*p2c2*...pncn (p为y的质因子)

那么x=(p1-1)p1c1-1*(p2-1)p2c2-1*...*(pn-1)pncn-1;

我的思路是处理x的约数,把+1后等于质数的约数处理出来,和质因子一起。然后进行搜索即可 .



第三题是最水题,可惜到12点我才来做,只想到了60分的做法。

N=5000,2s时限。可以用O(N2)的方法过。

类似之前做过的一道叫好元素的题。开数组记录两个数的和为i的方案和一个数为i的方案有多少种。然后ans[i]=hashtwo(a[i]-a[j])+hashone(a[i]-2*a[j])+1(如果有3*a[j]==a[i])则加。这样每个三元组都被算了3次,把ans/3即是答案



教训:

1.注意分配时间,不要在一道题上花过多时间,以致其他题没有时间做。

2.分析题目的难度,由难到易做。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值