题解 P4264 【[USACO18FEB]Teleportation S】
题目传输门
简单介绍一下题目意思:
当交接点为
当交接点为
当交接点为
然后,就用一个map维护函数图像的交接点就行了
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read()
{
int x=0;
bool f=0;
char c=getchar();
while (!isdigit(c))
f|=(c=='-'),c=getchar();
while (isdigit(c))
x=(x<<3)+(x<<1)+(c^48),c=getchar();
return f?-x:x;
}
void write(int x) {
if(x<0) {
putchar('-');
x=-x;
}
if(x>9) write(x/10);
putchar(x%10+'0');
}
int n;
int ans;
int sum;
map<int,int> mp;
int minn;
int k;
int l;
signed main(){
n=read();
for(register int i=1;i<=n;++i)
{
int x;
int y;
x=read();
y=read();
ans+=abs(x-y);
if(abs(x)<=abs(x-y))//初始化三个交接点
{
mp[y]+=2;
mp[y-abs(x-y)+abs(x)]--;
mp[y+abs(x-y)-abs(x)]--;
}
}
minn=ans;
l=-100000000;
map<int,int>::iterator i;
for(i=mp.begin();i!=mp.end();++i)//分别枚举三个交接点
{
int y=i->first;
int h=i->second;
minn+=sum*(y-l);
l=y;
sum+=h;
ans=min(ans,minn);
}
write(ans);//输出
return 0;
}
最后,祝大家