D1. Toy Train (Simplified)
http://codeforces.com/contest/1130/problem/D1
给你n个点,m个糖,告诉你这个糖要从x点拿到y点,每次经过一个城市只能拿一个糖,但可以放任意数量的糖
问你从任意一个点开始走,最少要走几步,只能从1->2->3->4……->n->1
先带走最远的糖,这样省下来的就是最近的,可以减少步数
#include <bits/stdc++.h>
using namespace std;
priority_queue <int, vector <int>, less <int> > q[105][105];
int main()
{
int n,m,x,y,t;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>x>>y;
if(y>x) t=y-x;
else t=n-x+y;
for(int j=1;j<=n;j++)
q[j][x].push(t);
}
for(int j=1;j<=n;j++)
{
int v=0,o=0;
t=j-1;
for(int i=1;; i++)
{
v--;
t++;
if(v==0&&o==m)
{
printf("%d ",i-1);
break;
}
if(t%n) t=t%n;
else t=n;
if(!q[j][t].empty())
{
o++;
int k=q[j][t].top();
v=max(v,k);
q[j][t].pop();
}
}
}
return 0;
}