Boxes

Time Limit: 1 Sec

Memory Limit: 256 MB

题目连接

http://hihocoder.com/contest/acmicpc2015beijingonline/problem/7

Description

There is a strange storehouse in PKU. In this storehouse there are n slots for boxes, forming a line. In each slot you can pile up any amount of boxes. The limitation is that you can only pile a smaller one above a bigger one, in order to keep balance. The slots are numbered from 1 to n. The leftmost one is slot 1.

At first there is exactly one box in each slot. The volume of the box in slot i is vi. As a virgo, you decide to sort these boxes by moving some of them. In each move you can choose a slot and move the top box in this slot to an adjacent slot (of course you can only put it on the top). You should ensure that the limitation mentioned above is still satisfied after this move. After the sort operation, there should be exactly one box in each slot, and for each pair of adjacent slots, the box in the left one should be smaller than the box in the right one.

Your task is to calculate the minimum number of moves you need to sort the boxes.

Input

In the first line there’s an integer T(T≤6000), indicating the number of test cases. The following 2T lines describe the test cases.

In each test case, the first line contains an integer n, indicating the number of slots. The second line contains n integers v1,v2…vn, indicating the volume of the boxes. It is guaranteed that all vi in a test case are different.

Please note that n<8,0≤vi≤104

Output

For each test case, print a line containing one integer indicating the answer. If there are infinity common points, print -1.

Sample Input

4
3
2 1 3
2
7 8
2
10000 1000
3
97 96 95

Sample Output

4
0
-1
20

HINT

题意

给你一堆盒子,每个盒子只能仍在旁边比他大的上面,你每次只能操作当前位置最小的一个

然后问你最少多少次,可以使得盒子摆放有序

题解:

bfs爆搜……

恶心题,太麻烦了= =

代码:

//qscqesze
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <queue>
#include <typeinfo>
#include <fstream>
#include <map>
#include <stack>
typedef long long ll;
using namespace std;
//freopen("D.in","r",stdin);
//freopen("D.out","w",stdout);
#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
#define maxn 2000000 + 500
#define mod 10007
#define eps 1e-9
int Num;
char CH[];
//const int inf=0x7fffffff; //нчоч╢С
const int inf=0x3f3f3f3f;
//************************************************************************************** int dp7[][][][][][][];
int vis7[][][][][][][];
int dp6[][][][][][];
int vis6[][][][][][];
int dp5[][][][][];
int vis5[][][][][];
int dp4[][][][];
int vis4[][][][];
int dp3[][][];
int vis3[][][];
int dp2[][];
int vis2[][];
int dp1[];
int vis1[];
map<int,int> H;
int a[];
int b[];
int vvv[];
struct node
{
int a[];
int step;
};
int check(int a[],int num,int step)
{
if(num==)
{
if(vis7[a[]][a[]][a[]][a[]][a[]][a[]][a[]])
return ;
dp7[a[]][a[]][a[]][a[]][a[]][a[]][a[]]=step;
vis7[a[]][a[]][a[]][a[]][a[]][a[]][a[]] = ;
return ;
}
if(num==)
{
if(vis6[a[]][a[]][a[]][a[]][a[]][a[]])
return ;
dp6[a[]][a[]][a[]][a[]][a[]][a[]]=step;
vis6[a[]][a[]][a[]][a[]][a[]][a[]]= ;
return ;
}
if(num==)
{
if(vis5[a[]][a[]][a[]][a[]][a[]])
return ;
dp5[a[]][a[]][a[]][a[]][a[]]=step;
vis5[a[]][a[]][a[]][a[]][a[]]= ;
return ;
}
if(num==)
{
if(vis4[a[]][a[]][a[]][a[]])
return ;
dp4[a[]][a[]][a[]][a[]]=step;
vis4[a[]][a[]][a[]][a[]]= ;
return ;
}
if(num==)
{
if(vis3[a[]][a[]][a[]])
return ;
dp3[a[]][a[]][a[]]=step;
vis3[a[]][a[]][a[]]= ;
return ;
}
if(num==)
{
if(vis2[a[]][a[]])
return ;
dp2[a[]][a[]]=step;
vis2[a[]][a[]]= ;
return ;
}
if(num==)
{
if(vis1[a[]])
return ;
dp1[a[]]=step;
vis1[a[]]= ;
return ;
}
return ;
}
void solve(int ccc[],int step,int num)
{
node p;
for(int i=;i<num;i++)
p.a[i]=ccc[i];
int a[];
check(ccc,num,);
queue<node> Q;
p.step = ;
Q.push(p);
while(!Q.empty())
{
node k = Q.front();
Q.pop();
for(int i=;i<num;i++)
a[i]=k.a[i];
for(int i=;i<num;i++)
{
int temp = a[i];
int l = a[i]-,r = a[i]+;
if(l<)l=-;
if(r>=num)r=-;
for(int j=;j<i;j++)
{
if(a[j]==a[i])
{
l = -;
r = -;
}
}
for(int j=;j<i;j++)
if(a[j]==a[i]-)
l = -;
for(int j=;j<i;j++)
if(a[j]==a[i]+)
r = -;
if(l!=-)
{
a[i]=l;
for(int i=;i<num;i++)
p.a[i]=a[i];
p.step = k.step + ;
if(check(a,num,p.step))
Q.push(p);
a[i]=temp;
}
if(r!=-)
{
a[i]=r;
for(int i=;i<num;i++)
p.a[i]=a[i];
p.step = k.step + ;
if(check(a,num,p.step))
Q.push(p);
a[i]=temp;
}
}
}
} int main()
{
int t;scanf("%d",&t);
int c[];
memset(dp7,-,sizeof(dp7));
memset(dp6,-,sizeof(dp6));
memset(dp5,-,sizeof(dp5));
memset(dp4,-,sizeof(dp4));
memset(dp3,-,sizeof(dp3));
memset(dp2,-,sizeof(dp2));
memset(dp1,-,sizeof(dp1));
for(int i=;i<;i++)
c[i]=i;
for(int i=;i<;i++)
solve(c,,i+);
while(t--)
{
H.clear();
vector<int> Q;
int n;scanf("%d",&n);
for(int i=;i<n;i++)
{scanf("%d",&a[i]);Q.push_back(a[i]);}
sort(Q.begin(),Q.end());
for(int i=;i<Q.size();i++)
H[Q[i]]=i;
for(int i=;i<n;i++)
b[H[a[i]]]=i;
if(n==)
{
if(b[]==)
printf("0\n");
else
printf("%d\n",dp1[b[]]);
}
if(n==)
{
if(b[]==&&b[]==)
printf("0\n");
else
printf("%d\n",dp2[b[]][b[]]);
}
if(n==)
{
if(b[]==&&b[]==&&b[]==)
printf("0\n");
else
printf("%d\n",dp3[b[]][b[]][b[]]);
}
if(n==)
{
if(b[]==&&b[]==&&b[]==&&b[]==)
printf("0\n");
else
printf("%d\n",dp4[b[]][b[]][b[]][b[]]);
}
if(n==)
{
if(b[]==&&b[]==&&b[]==&&b[]==&&b[]==)
printf("0\n");
else
printf("%d\n",dp5[b[]][b[]][b[]][b[]][b[]]);
}
if(n==)
{
if(b[]==&&b[]==&&b[]==&&b[]==&&b[]==&&b[]==)
printf("0\n");
else
printf("%d\n",dp6[b[]][b[]][b[]][b[]][b[]][b[]]);
}
if(n==)
{
if(b[]==&&b[]==&&b[]==&&b[]==&&b[]==&&b[]==&&b[]==)
printf("0\n");
else
printf("%d\n",dp7[b[]][b[]][b[]][b[]][b[]][b[]][b[]]);
} }
}

2015北京网络赛 G题 Boxes bfs的更多相关文章

  1. 2015北京网络赛 G Boxes BFS+打表

    G Boxes 题意:n个位置摆有n个箱子,每次移动只能把相邻的垒起来,且上面的必须小于下面的.求摆成升序需要移动多少步. 思路:这里的n很小,只有7.但是bfs最快的情况需要2s左右,所以就打表了. ...

  2. 2015北京网络赛 H题 Fractal 找规律

    Fractal Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/contest/acmicpc2015beijingo ...

  3. hihocoder 1236(2015北京网络赛 J题) 分块bitset乱搞题

    题目大意: 每个人有五门课成绩,初始给定一部分学生的成绩,然后每次询问给出一个学生的成绩,希望知道在给定的一堆学生的成绩比这个学生每门都低或者相等的人数 因为强行要求在线查询,所以题目要求,每次当前给 ...

  4. 2015北京网络赛B题 Mission Impossible 6

    借用大牛的一张图片:模拟 #include<cstdio> #include<cmath> #include<cstring> #include<algori ...

  5. 2015北京网络赛A题The Cats' Feeding Spots

    题意:给你一百个点,找个以这些点为中心的最小的圆,使得这个圆恰好包含了n个点,而且这个圆的边界上并没有点 解题思路:暴力枚举每个点,求出每个点到其他点的距离,取第n大的点,判断一下. #include ...

  6. 2015北京网络赛 A题 The Cats' Feeding Spots 暴力

    The Cats' Feeding Spots Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/contest/acm ...

  7. 2015北京网络赛 Couple Trees 倍增算法

    2015北京网络赛 Couple Trees 题意:两棵树,求不同树上两个节点的最近公共祖先 思路:比赛时看过的队伍不是很多,没有仔细想.今天补题才发现有个 倍增算法,自己竟然不知道.  解法来自 q ...

  8. 2015北京网络赛 D-The Celebration of Rabbits 动归+FWT

    2015北京网络赛 D-The Celebration of Rabbits 题意: 给定四个正整数n, m, L, R (1≤n,m,L,R≤1000). 设a为一个长度为2n+1的序列. 设f(x ...

  9. 2015北京网络赛 J Scores bitset+分块

    2015北京网络赛 J Scores 题意:50000组5维数据,50000个询问,问有多少组每一维都不大于询问的数据 思路:赛时没有思路,后来看解题报告也因为智商太低看了半天看不懂.bitset之前 ...

随机推荐

  1. java中synchronized的用法详解

    记下来,很重要. Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchron ...

  2. 8款JS框架比较

    Dojo     Dojo 是目前最为强大的JS框架,它在自己的 Wiki 上给自己下了一个定义,Dojo 是一个用 JavaScript 编写的开源的DHTML工具箱.Dojo 很想做一个“大一统” ...

  3. UVA 1658 Admiral 海上将军(最小费用流,拆点)

    题意: 一个有v个点的有向图,要从点1到点v需要找两条路径,两路径不可经过同一个点(除了1和v点).求这两条路径的最小费用(保证有解). 分析: 难在建图,其他套模板. 此图给的是超级复杂图,两个点之 ...

  4. iOS开发中提交带有中文或特殊字符串的参数

    iOS开发中,与后台进行数据交换是一个很常见的场景. 在web开发中,对于我们提交的地址,浏览器会负责进行decode,但是在ios中,必须要自己手动来实现.否则我们拼接出的网址在包括中文.特殊字符串 ...

  5. 咨询内容: TF卡一定要重新买吗,为什么我的放进去读不了呢

    京东回复:您好!先科(SAST) SA-992 便携数码音响 (兰色)不用重新买,但是需要您采用FAT分区重新格式化,感谢您对京东的支持!祝您购物愉快!

  6. tap/click on search button on softkeyboard

    driver.sendKeyEvent(84);Appium says it successfully sent in the command but 'search' does not get ta ...

  7. selenium 调用JS操作滚动条(java)来解决element not clickable的问题

    今天在运行自动化用例的时候,发现总是某个元素提示not  clickable.分析原因有可能是页面右下角那个大大的top图标,刚好挡住了我要点击的元素.要解决就得拉动页面,就需要操作页面上的滚动条. ...

  8. wuzhicms 查看模板中的所有可用变量和值

    将代码放到模板中. {php print_r(get_defined_vars());} 页面显示如下: 这样看不清楚. 通过查看页面源文件的方式打开. 例如:chrome 浏览器打开方式,在页面空白 ...

  9. android NDK 实用学习(五)-c++端调用java接口

    1,阅读此文章前请阅读前面文章,以免阅读出现障碍: android NDK 实用学习(一)-获取java端类及其类变量 android NDK 实用学习(二)-java端对象成员赋值和获取对象成员值 ...

  10. UMA - Unity Multipurpose Avatar

    UMA - Unity Multipurpose Avatar UMA version 1.0.1.0R Unity 4.3 What is UMA? UMA - Unity Multipurpose ...