2014 Multi-University Training Contest 8题解

来源:互联网 发布:宫崎骏隐喻知乎 编辑:程序博客网 时间:2024/06/06 01:43

HDU 4952 Number Transformation     http://acm.hdu.edu.cn/showproblem.php?pid=4952

题意:找出不小于当前的xi,并且最接近当前的xi,并且是i+1的倍数xi+1。

题解:

xi=x1*i; //i=1时,x1=x;

xi+1=x1*(i+1);

那么肯定有:x2*(i+1)>=X1*i;

化简后可得:x2>=i/(i+1)*x——>x2>=x1-x1/(i+1);

由于是求最接近xi的xi+1,那么x2==x1-[x1/(i+1)];

可以发现,当x1<i+1后,x2的值不在变化,则最后的结果为k*x;

官方的题解(1008):

http://weibo.com/hdacm?from=myfollow_all

#include<stdio.h>#include<math.h>#define LL long long intint main(){LL x,k;LL cas=1;while(~scanf("%I64d %I64d",&x,&k),(x||k)){for(LL i=1;i<k;i++){if(x<i+1) break;x-=x/(i+1);}printf("Case #%I64d: %I64d\n",cas++,x*k);}return 0;}

比赛的时候,有暴力打表,把所有的都打出来,发现前面的一节是没有规律的,但是到了一定的数量后,会呈等差数列增长。

但是比赛的时候。发现这些后,竟然没有再继续思考下去,(因为没有去总结书呈等差数列增长的,怎么会没有去总结,然后就跑去看其他的题目了呢?)

诶!应该是比赛的时候对自己没有什么自信。然后就没有死磕下去。

还有就是,团队合作有问题。1.队友比着赛,就边讨论,边嬉笑,导致没有了比赛的状态。2.最后其他两个队友在做凸包哪一题,我也自己一个人在这题,

严重的浪费了资源,我当时就应该做这题,不不应该也做凸包。

每次做多校都这样。

#include<stdio.h>#define LL long long intint main(){LL x,k,pre,ok,cha;LL cas=1;while(~scanf("%I64d %I64d",&x,&k),(x||k)){bool flag=false;if(x==1) {printf("Case #%I64d: %I64d\n",cas++,k);continue;}pre=x;for(LL i=2;i<=k;i++){if(x%i!=0){x=(x/i+1)*i;}pre=x;//printf("%I64d %I64d\n",i,x);if(pre/(i-1)==x/i){ok=i;cha=x/i;flag=true;break;}}if(flag==false) printf("Case #%I64d: %I64d\n",cas++,x);else printf("Case #%I64d: %I64d\n",cas++,x+(k-ok)*cha);}return 0;}


0 0
原创粉丝点击