P2534 [AHOI2012]铁盘整理

题目描述

输入输出格式

输入格式:

共两行。第一行为铁盘个数N(1<=N<=50),第二行为N个不同的正整数,分别为从上到下的铁盘的半径R。(1<=R<=100)

输出格式:

一个正整数,表示使铁盘从小到大有序需要的最少翻转次数。

输入输出样例

输入样例#1:

5
2 4 3 5 1
输出样例#1:

5
//第一种:使用string.h中的strrev函数,只用于字符串
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char s[]="hello";
strrev(s);
cout<<s<<endl;
return ;
} //第二种:使用algorithm中的reverse函数,也适用于整型数组及其他存储结构
#include <iostream>
#include <string>
#include <algorithm>
using namespace std; int main()
{
string s="hello";
reverse(s.begin(),s.end());
cout<<s<<endl;
return ;
}

反转操作

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define mod1 2333333
#define mod2 1048577
#define maxn 51
using namespace std;
int n,t[maxn];
struct node{
int a[maxn],step;
}cur,nxt;
queue<node>q;
bool vis1[],vis2[];
int hash1(int x[]){
int res=;
for(int i=;i<=n;i++)res=(res*%mod1+x[i])*%mod1;
return res;
}
int hash2(int x[]){
int res=;
for(int i=;i<=n;i++)res=(res*%mod2+x[i])*%mod2;
return res;
}
int main(){
freopen("Cola.txt","r",stdin);
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&cur.a[i]),t[i]=cur.a[i];
sort(t+,t+n+);
int t1=hash1(t),t2=hash2(t);
if(hash1(cur.a)==t1&&hash2(cur.a)==t2){puts("");return ;}
cur.step=;
q.push(cur);
while(!q.empty()){
cur=q.front();q.pop();
for(int i=;i<=n;i++){
nxt=cur;
reverse(nxt.a+,nxt.a+i+);
int h1=hash1(nxt.a),h2=hash2(nxt.a);
if(h1==t1&&h2==t2){
printf("%d",cur.step+);
return ;
}
if(!vis1[h1]||!vis2[h2]){
vis1[h1]=;vis2[h2]=;
nxt.step=cur.step+;
q.push(nxt);
}
}
}
return ;
}

20分 裸搜

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#define maxn 51
using namespace std;
int n,a[maxn];
struct node{
int w,id;
bool operator < (const node b)const{
return w<b.w;
}
}e[maxn];
int get(){
int res=;
for(int i=;i<=n;i++)
if(abs(a[i]-a[i-])!=)res++;
return res;
}
void dfs(int limit,int step){
int h=get();
if(!h&&a[]<a[]){
printf("%d",limit);
exit();
}
if(h+step>limit||step==limit)return;
for(int i=;i<=n;i++){
if(abs(a[i]-a[i+])!=){
reverse(a+,a+i+);
dfs(limit,step+);
reverse(a+,a+i+);
}
}
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&e[i].w),e[i].id=i;
sort(e+,e+n+);
for(int i=;i<=n;i++)a[e[i].id]=i;
a[]=-0x7f7f7f7f;a[n+]=0x7f7f7f7f;
for(int k=;;k++)dfs(k,);
}

100分 迭代加深搜索

洛谷P2534 [AHOI2012]铁盘整理的更多相关文章

  1. 洛谷 P2534 [AHOI2012]铁盘整理

    P2534 [AHOI2012]铁盘整理 题目描述 输入输出格式 输入格式: 共两行.第一行为铁盘个数N(1<=N<=50),第二行为N个不同的正整数,分别为从上到下的铁盘的半径R.(1& ...

  2. BZOJ2824 AHOI2012 铁盘整理 【IDA*】

    BZOJ2824 AHOI2012 铁盘整理 Description 在训练中,一些臂力训练器材是少不了的,小龙在练习的时候发现举重器械上的铁盘放置的非常混乱,并没有按照从轻到重的顺序摆放,这样非常不 ...

  3. BZOJ 2824: [AHOI2012]铁盘整理

    BZOJ 2824: [AHOI2012]铁盘整理 标签(空格分隔): OI-BZOJ OI-搜索 Time Limit: 10 Sec Memory Limit: 128 MB Descriptio ...

  4. [AHOI2012]铁盘整理

    题目描述 输入输出格式 输入格式: 共两行.第一行为铁盘个数N(1<=N<=50),第二行为N个不同的正整数,分别为从上到下的铁盘的半径R.(1<=R<=100) 输出格式: ...

  5. 【题解】洛谷P2532 [AHOI2012]树屋阶梯(卡特兰数+高精)

    洛谷P2532:https://www.luogu.org/problemnew/show/P2532 思路 来自Sooke大佬的推导: https://www.luogu.org/blog/Sook ...

  6. (bzoj1337 || 洛谷P1742 最小圆覆盖 )|| (bzoj2823 || 洛谷P2533 [AHOI2012]信号塔)

    bzoj1337 洛谷P1742 用随机增量法.讲解:https://blog.csdn.net/jokerwyt/article/details/79221345 设点集A的最小覆盖圆为g(A) 可 ...

  7. 洛谷p2370yyy2015c01的U盘题解

    没什么特殊的想法 就是看自己很久没有更新关于题解类的文章了而已 (其实这是我好久之前做的, 只是把它从洛谷博客搬到了这里而已) 题目 首先分析题目要二分 他长成这个亚子太二分了 所以就要二分 最好是先 ...

  8. 洛谷P2532 [AHOI2012]树屋阶梯(Catalan数)

    P2532 [AHOI2012]树屋阶梯 题目描述 输入输出格式 输入格式: 一个正整数N(1<=N<=500),表示阶梯的高度. 输出格式: 一个正整数,表示搭建方法的个数.(注:搭建方 ...

  9. 洛谷 P1103 书本整理(动规)

    洛谷 P1103 书本整理 题目描述 Frank是一个非常喜爱整洁的人.他有一大堆书和一个书架,想要把书放在书架上.书架可以放下所有的书,所以Frank首先将书按高度顺序排列在书架上.但是Frank发 ...

随机推荐

  1. hihocoder-1285 智力竞赛(区间dp)

    智力竞赛 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi.小Ho还有被小Hi强拉来的小Z,准备组队参加一个智力竞赛.竞赛采用过关制,共计N个关卡.在第i个关卡中,小 ...

  2. Convolutional Neural Networks for Visual Recognition 4

    Modeling one neuron 下面我们开始介绍神经网络,我们先从最简单的一个神经元的情况开始,一个简单的神经元包括输入,激励函数以及输出.如下图所示: 一个神经元类似一个线性分类器,如果激励 ...

  3. [原]NYOJ-大数阶乘-28

    大学生程序代写 //http://acm.nyist.net/JudgeOnline/problem.php?pid=28 /*题目28题目信息运行结果本题排行讨论区大数阶乘 时间限制:3000 ms ...

  4. 树套树Day1线段树套平衡树bzoj3196

    您需要写一种数据结构,来维护一个有序数列,其中需要提供以下操作:1.查询k在区间内的排名2.查询区间内排名为k的值3.修改某一位值上的数值4.查询k在区间内的前驱(前驱定义为小于x,且最大的数)5.查 ...

  5. redisCheckMem脚本

    最近维护的redis cluster需要扫描每个实例的内存使用率,首先我们需要获取实例已经使用的内存,获取实例的最大内存配额,两个值相比就能获取到内存使用比例. 实例的最大内存获取方法: $REDIS ...

  6. bzoj 1007: [HNOI2008]水平可见直线 半平面交

    题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=1007; 题解 其实就是求每条直线的上半部分的交 所以做裸半平面交即可 #include ...

  7. bzoj 1113 海报pla

    Description N个矩形,排成一排. 现在希望用尽量少的矩形海报Cover住它们. Input 第一行给出数字N,代表有N个矩形.N在[1,250000] 下面N行,每行给出矩形的长与宽.其值 ...

  8. CSS禁止鼠标事件---pointer-events:none

    pointer-events:none顾名思意,就是鼠标事件拜拜的意思.元素应用了该CSS属性,链接啊,点击啊什么的都变成了“浮云牌酱油”.

  9. Gson小记

    Gson过滤字段,只要在字段前面添加“transient”关键字即可:之前就是因为Channel字段序列化的时候导致了stack over异常.

  10. CCS V5 使用教程一: 安装激活与创建工程

    CCS下载与安装 下载地址 Liscense下载地址 安装教程 创建工程 工程创建教程