箱子再分配問題需要解決如下問題:
(1)一共有n個物品,堆成m堆。
(2)所有物品都是一樣的,但是它們有不同的優先順序。
(3)你只能夠移動某堆中位於頂端的物品。
(4)你可以把任意一堆中位於頂端的物品移動到其它某堆的頂端。若此物品是當前所有物品中優先順序最高的,可以直接將之刪除而不用移動。
(5)求出將所有物品刪除所需的最小步數。刪除操作不計入步數之中。
(6)只是乙個比較難解決的問題,這裡你只需要解決乙個比較簡單的版本:
不會有兩個物品有著相同的優先順序,且m=2
題解:神奇的題。
將第乙個串反過來和第二個串相連,例如樣例就是541273,這樣的話,如果要刪除乙個點就是求出這個點和上乙個刪除的點之間的距離,注意一開始是求第乙個串的開頭和最大點之間的距離。例如樣例一開始是求541273(1到7)
開乙個陣列pos[i]表示第i大的位置,然後用樹狀陣列求出字首和,每刪乙個點就是把這個點的權值變成0;
注意要開longlong。
#include#include#include#include#include#includeusing namespace std;
const int n=100005;
int n,m;
int a[n],b[n],tot=0;
int l,r,mid;
int pos[n*2];
struct nodes[n*2];
bool cmp(node x,node y)
int sum[n*2];
int getsum(int x)
return ans;
}long long ans=0;
void init(int x,int y)
}int main()
for(int i=1;i<=n+m;i++)
init(i,1);
for(int i=1;i<=n+m;i++)
printf("%lld",ans);
}
3192 JLOI2013 刪除物品
time limit 10 sec memory limit 128 mb submit 977 solved 558 submit status discuss 箱子再分配問題需要解決如下問題 1 一共有n個物品,堆成m堆。2 所有物品都是一樣的,但是它們有不同的優先順序。3 你只能夠移動某堆中位...
3192 JLOI2013 刪除物品
time limit 10 sec memory limit 128 mb submit 1366 solved 794 submit status discuss 箱子再分配問題需要解決如下問題 1 一共有n個物品,堆成m堆。2 所有物品都是一樣的,但是它們有不同的優先順序。3 你只能夠移動某堆中...
BZOJ3192 JLOI2013 刪除物品
原題位址 自己想的奇葩做法 對於乙個優先順序為x的物品,考察該物品下方優先順序大於x物品的優先順序被分成了多少個連續段 舉個例子,如x 4,該物品下方物品的優先順序有5,6,7,9,10,13,14,19,則段數為4 則該物品需要被移動的次數k 段數 2 優先順序為x 1的物品在該物品下方?1 0 ...