题目大意
懒得写
做法
每一段内求个最高,列不等式。
#include<cstdio>
#include<algorithm>
#define fo(i,a,b) for(i=a;i<=b;i++)
using namespace std;
const int maxn=100000+10;
int d[maxn],h[maxn];
int i,j,k,l,t,n,m,x,y,ans;
bool czy;
int main(){
scanf("%d%d",&n,&m);
fo(i,1,m) scanf("%d%d",&d[i],&h[i]);
ans=max(h[1]+d[1]-1,h[m]+n-d[m]);
//d[0]=1;
czy=1;
fo(i,1,m-1){
y=d[i+1]-d[i];
x=(h[i+1]+y-h[i])/2;
ans=max(ans,h[i]+x);
if (h[i]<h[i+1]&&h[i]+y<h[i+1]) czy=0;
else if (h[i]>h[i+1]&&h[i]-y>h[i+1]) czy=0;
}
if (!czy) printf("IMPOSSIBLE\n");
else printf("%d\n",ans);
}
本文解析了一道算法题目,通过遍历每一段求最高值,并列出相应的不等式来解决问题。文中提供了完整的C++代码实现,适用于算法竞赛及算法学习者。
1681

被折叠的 条评论
为什么被折叠?



