[考试反思]0904NOIP模拟测试37:守望

100分并列的还有4个没粘

总分是大脸的一半,然而还只低了2名。差距好大。。。但其实后面的分数段又很密集,和我都差不了多少。。。

我可能也是最水的那一个,排行榜前7个里面就我没有AC。全是暴力。。。

 

这次考试的时间分配有点问题,要记录一下。

上来过了一边题目,T2的70分很好拿但是100分的暂时没有想出来,T1暴力只有30~60。

但是T3很不一样,像一个极其简单的dp,基本上没有思维量。

于是决定先入手T3,当我码上1k以上的时候我就知道这题没那么简单(考场上我的代码基本不上k)

一个小时过去了,我码完了但是调不过样例。没太着急,继续慢慢调。

8点的时候,我再次意识到了事态的严重性。100分钟一分没拿,有点危险了。

但是它已经出现了要过样例的迹象,我最后还是没有选择放弃。

最后在开考后128分钟我总算过了样例以及几个手模点,交了,长舒了一口气。

这倒是为数不多的在考场上交了长达1.6k的代码还没爆零。

但其实很危险,如果我觉得T3简单的话,那么如果T1T2难的话,剩的那么点时间岂不是要完蛋???

然而幸亏暴力不是很难。感觉还是T2比较简单,对着式子看了半天找到了规律,正准备AC。

然后这才600B的小玩意极其好打,匆匆忙忙23分钟搞定了。

 1 #include<cstdio>
 2 #define mod 1000003
 3 #define int long long
 4 int pow(int b,int t,int a=1){for(;t;t>>=1,b=b*b%mod)if(t&1)a=a*b%mod;return a;}
 5 int n,m,fz=1,cts,fm;
 6 main(){
 7     scanf("%lld%lld",&n,&m);int pm=m-1,cnt=0;
 8     while(pm)pm>>=1,cnt++;
 9     if(cnt>=n){puts("1 1");return 0;}
10     if(m>=mod)goto spj;
11     for(int i=1;i<m;++i){
12         int cnt=0;
13         for(int p=2;i%p==0;p<<=1,++cnt);
14         int j=i>>cnt;cts+=cnt;
15         fz=fz*(pow(2,n-cnt)-j)%mod;
16     }fm=pow(2,(n%(mod-1)*(m-1)-cts+mod-1));
17     printf("%lld %lld\n",(fm-fz)%mod,fm);return 0;
18 spj:for(int p=2;p<m;p<<=1)(cts+=(m-1)/p)%=(mod-1);
19     printf("0 %lld\n",pow(2,n%(mod-1)*(m-1)-cts+mod-1));
20 }
愚蠢的东西

错误很明显:分子减分母得到了负数然而没有+mod。而spj部分虽然式子里分子的确是0但是还要拿1减一下所以分子等于分母!

两个问题各丢了30分,剩下40。没时间检查没时间对拍。这时候是还有45分钟。
然后去T1,感觉不是很好做,时间又是很紧迫,还想稍微检查一下不要低错。

呼吸急促,8分钟打了一个600B的30分的纯暴力。

然后忽然想到优化,算错了复杂度,以为是O(n)的(实际是n2),10分钟码完,700B的代码有50分了。

然后还有20分钟左右。

然后我以为我能AK了。

我当时是真的这么想的:T1O(n)稳了,T2的100%数据也都会,T3手模各种毒瘤数据都没错。

然后不能飘不能飘。急忙打了一个对拍弄T1,没问题(还是没有考虑复杂度)

T2把样例扔进去没出锅,因为手模大点也不知道正解所以放过了(随便模两个就出负数了啊啊啊)

T3继续手模样例,还有7分钟时挂了一个,改了,再交,用10分盖掉了30分。

还有2分钟是又挂了一个,再改,再交,用30分又盖回来了。

然后就结束了。

 

这次关键就在于时间。T3吃掉了太多时间导致T1T2低错不断。

复杂度算错这种事情直接葬送了我去想正解的想法。

一定不要在其他题的能拿的分数都拿到的情况下,在一道题上肝超过80分钟!

还是要注意细节,不要因为想到思路就松懈了导致代码实现出锅。

打题之前一定要仔细分析思路的复杂度,要有准确的期望得分。

唉。。。还是太弱,什么毛病都犯。

也许是好事吧,毕竟这60多天就是用来犯错改正长记性的嘛。。。

 

posted @ 2019-09-06 15:03  DeepinC  阅读(240)  评论(0编辑  收藏  举报