码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-09-29 19:56:58      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:strong   www.   idt   简单的   str   main   stdout   一个   com   

此次比赛由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

标签:strong   www.   idt   简单的   str   main   stdout   一个   com   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!