首页 > 其他 > 详细

【学长出题】【比赛题解】17-09-29

时间:2017-09-29 18:30:23      阅读:163      评论:0      收藏:0      [点我收藏+]

此次比赛由dalao学长@FallDream出题,欢迎查看他的blog!

【T1】

题意:

技术分享

样例:

技术分享

(1<=n<=100000, 1<=xi,yi<=10^9)

题解:

加一个骨牌,就相当于把最后的若干个骨牌删除,再算之前的答案。

如果我们对任意的前i个骨牌算出答案,就可以简单地算出最终答案。

就有了dp的想法,可以发现是比较简单的。

f[i]=f[k]+(i-k),k是i推倒后最后一个没有被推倒的骨牌编号。

 1 #include<cstdio>
 2 #include<algorithm>
 3 typedef std::pair<int,int> P;
 4 P a[100001];
 5 int n,f[100001],Ans=100000;
 6 int main(){
 7     freopen("card.in","r",stdin);
 8     freopen("card.out","w",stdout);
 9     scanf("%d",&n);
10     for(int i=1;i<=n;++i) scanf("%d%d",&a[i].first,&a[i].second);
11     std::sort(a+1,a+n+1);
12 //    for(int i=1;i<=n;++i) printf("%d %d\n",a[i].first,a[i].second);
13     for(int i=1;i<=n;++i){
14         int R=std::lower_bound(a+1,a+n+1,P(a[i].first-a[i].second,0)) - a;
15         f[i] = f[R-1] + i-R;
16 //        printf("%d ",f[i]);
17         if(Ans > f[i] + n-i) Ans = f[i] + n-i;
18     }
19     printf("%d",Ans);
20     return 0;
21 }

【T2】

题意:

技术分享

样例:

技术分享

题解:

易证,一个数组的海棠度,一定有j=i+1。

【学长出题】【比赛题解】17-09-29

原文:http://www.cnblogs.com/PinkRabbit/p/7612223.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!