标签:
昨天我们考了CQOI2015的题。。那还是找一道最可做的写一写好了>.<。。
考试的结果还是不多说了。。反正我是知道暴力乱搞高精度的重要性了。。骗分的OI才有随机性才好玩,嘛。。。
成绩不忍直视但竟然还没出前三。。感人肺腑。。。
怎么觉得自从看了CLJ犇的Blog之后越来越喜欢模仿他们的语气卖萌了呢~~
还是总结一下考试好了,嗯。。。
感觉我考的时候还是不太在状态。。然后有的题目想出来了之后就不太想打了= =。。然后四处duang啊duang。。时间一下子就过去了呢>.<
根据C老师的经验嘛,考前喝咖啡效果极佳。。下次试试。。哎好像就是明天了。。
我发现我不是在写题解是在扯谈诶。。本来就是在扯淡。。
那还是说题目吧,问题自己找→_→
打的思路很快就有了,算出所有可能是约数是K的然后再减去不是最大公约数的就可以了。。、
然后怎么做呢。。冥冥之间我想到了NOI能量采集,但记不太清了。。那还是算了吧。。
唯一分解定理真是印象深刻。。于是我决定用素数搞一搞。。
自己出了2 1 1 10这组数据,发现和暴力拍出来不太一样啊。。那怎么办呢。。手动算一算好了。。
然后发现2的时候算了6、3的时候也算了6,多减了。。那怎么办呢。。加回来好了。。哎怎么觉得这么像容斥原理呢。。想想好像真的是耶~~
getprime到R/K,然后再开容斥原理就好了,深搜一下,*啊*,当然超过R/K停止就可以了,算一下[L,R]是它倍数的有多少。。然后奇-偶+就好了。。
关于算是它的倍数有多少。。考试的时候写得非常不优美。。再次怀疑我的智商。。
搜的时候差点准备…了,幸好突然清醒了一下。。
那么这么做是80分,如果K很小L很大就炸掉了。。
#include<cstdio> #define ll long long //#define uint unsigned int int p[1001000]={0},P=0,ans=0; int N,K,L,H,mod=1000000007,fx; bool mark[10001000]={0}; void getpri(int L){ for(int i=2;i<=L;i++) if(!mark[i]){ p[++P]=i; for(long long j=i*i;j<=L;j+=i) mark[j]=1; } } int ksm(int x,int k){ if(k==0) return 1; if(k==1) return x; ll ans=ksm(x,k/2); return (ans*ans%mod*ksm(x,k%2))%mod; } void count(int x,int T){ fx=T%2==0?1:-1; int S=L+(x-L%x); if(S==L+x) S-=x; ans+=fx*ksm((H-S)/x+1,N); ans%=mod; } void search(int k,int x,int sum){ count(sum,k); for(int i=x+1;i<=P;i++){ if((long long)sum*p[i]>H) return; search(k+1,i,sum*p[i]); } } int main(){ scanf("%d%d%d%d",&N,&K,&L,&H); getpri(H/K); count(K,0); for(int i=1;i<=P;i++) search(1,i,p[i]*K); printf("%d",ans>=0?ans:ans+mod); return 0; }
真的是非常丑陋。。见笑了>.<。。发现我竟然用的是k(uai)s(u)m(i),以后还是打pow好了。。
考完之后,怎么觉得能量采集好像是对的啊。。然后搜了搜标解,真的是能量采集啊。
f[i]表示正好约数是i的个数,倒着求,减去f[x*i],x>1&&x∈N。。正确性自己感悟吧。。
想想竟然是一道以前做过的竟然没搞出来sososad。。当时啊没仔细感悟抄了题解A了就放一边了。。以后还是不能这样了呢>.<
至于题解的代码。。有一些部分感觉十分hehe。。还是不说了>.<
不过题解pow求法简直棒极了~~不用递归呢~~以后就用它了~~~
1 #include<cstdio> 2 #define SF scanf 3 #define PF printf 4 int f[100100]={0},MOD=1000000007; 5 int pow(int x,int k){ 6 int ans = 1; 7 while(k) { 8 if(k&1) ans=1LL*ans*x%MOD; 9 x=1LL*x*x%MOD; 10 k>>=1; 11 } 12 return ans; 13 } 14 int main(){ 15 int N,K,L,R; 16 SF("%d%d%d%d",&N,&K,&L,&R); 17 int l=L/K,r=R/K; 18 if(L%K) l++; 19 int a,b; 20 for(int i=r;i>=1;i--){ 21 a=l/i; b=r/i; 22 if(l%i) a++; 23 f[i]=pow(b-a+1,N); 24 for(int j=2*i;j<=r;j+=i) f[i]-=f[j],f[i]%=MOD; 25 } 26 PF("%d",f[1]>=0?f[1]:f[1]+MOD); 27 return 0; 28 }
没搞清的。。这样做K小H大也会爆炸呢。。
然后H-L<10^5用意何在。。出题人范逗么。。害我纠结好久。。
卡了这个暴力就卡不了那个暴力。。所以虽然算法有一定缺陷。。一般也就卡一两个点。。RP好还能A呢。。
扯了好多淡这题就这样好了>.<
其他的几道题呢。。还有点伤感。。这次真的是没打成一点暴力。。本想着最后打也不迟。。结果根本搞不过来。。还有某到算法很裸的,没打高精度,本来想着50分应该差也差不多呢。。结果10分滚粗。。
且说某Z纯暴力第3题AC,结果偏偏这题我没打。。真的一切的一切都说不定呢。。怎么突然觉得又有点悲伤又有点好玩呢>w<
还有一道网络流的,还是绕道而行好了,还有一道记忆化搜索,晃着晃着没时间打了。。
看了看高二考试的成绩。。发现绝大多数的真的没想象中的厉害呢。。
顺便突然发现暴力打好名次肯定不会太差呢。。所以不要有什么压力呢。。
明天就可以高一高二联考了。。不错的机会呢,试试XD
还有些自己想想就好了懒得打出来。。
其实没必要想那么多“终日之思不如须臾之所学”嘛。。
>.< >.< >.<
标签:
原文地址:http://www.cnblogs.com/xkui/p/4415619.html