题解:P13594 『GTOI - 1A』Bath
Solution
题意为小H的洗澡水初始温度为
这道题我们可以首先将所有事件按时间顺序处理,从初始温度开始,按时间顺序应用每个时刻的温度变化。
然后当某个时刻的温度变化会导致水温超出
调整的目标是找到一个新温度
调整后,后续的温度变化基于新的
为了最小化调整次数,每次调整时应尽可能选择一个温度,使得后续尽可能多的变化不会导致超出范围。这可以通过维护一个“可行温度区间”来实现。
AC code
#include <bits/stdc++.h>
using namespace std;
struct p{
int t,x;
}a[100003];
bool cmp(p b, p c)
{
return b.t<c.t;
}
int n,s,l,r,ans,i,b,c;
int main()
{
cin>>n>>s>>l>>r;
for(int i=0;i<n;i++)
cin>>a[i].t>>a[i].x;
sort(a,a+n,cmp);
b=s,c=s;
while(i<n)
{
int x=a[i].t,y=0;
while(i<n&&a[i].t==x)
y+=a[i].x,i++;
if(b+y>r||c+y<l) ans++,b=l,c=r;
else b=max(b+y,l),c=min(c+y,r);
}
cout<<ans;
return 0;
}