题意:一个一维数组动态的生成一些“蛋糕”,玩家在起点,每次询问要求吃掉离你最近的蛋糕,若有两个以上蛋糕距离相同,选择当前移动方向上的蛋糕,问一共走了多少步
坑点:注意不走动的情况下移动方向不变
#include <iostream>
using namespace std;
#include <set>
int abs(int a)
{
return a>0?a:-a;
}
void work(int t)
{
multiset<int> p;
multiset<int>::iterator it,ti;
int len,n,q,k;
int now=0,i,l,r,way=0,sum=0;
cin>>len>>n;
for(i=0;i<n;i++)
{
cin>>q;
if(q==0)
{
cin>>k;
if(k<=len)
p.insert(k);
continue;
}
if(p.empty())
{
way=0;
continue;
}
it=p.lower_bound(now);
if(it==p.end() || it==p.begin() )
{
if(it==p.begin())
if(*it==now)
way=way;
else way=1;
else it--, way=0;
l=*it;
sum+=abs(l-now);
now=l;
p.erase(it);
}
else
{
r=*it;
ti=it;
it--;
l=*it;
l=abs(now-l),r=abs(now-r);
if(l>r || l==r&&way==1)
{
sum+=r;
if(r==0) way=way;
else way=1;
now=*ti ;
p.erase(ti);
}
else
{
sum+=l ;
if(l==0)
way=way;
else way=0;
now=*it;
p.erase(it) ;
}
}
}
cout<<"Case "<<t<<": "<<sum<<endl;
}
int main()
{
int t,f=1;
cin>>t;
while(t--)
work(f++);
return 0;
}