洛谷P2534 [AHOI2012]铁盘整理
P2534 [AHOI2012]铁盘整理
题目描述


输入输出格式
输入格式:
共两行。第一行为铁盘个数N(1<=N<=50),第二行为N个不同的正整数,分别为从上到下的铁盘的半径R。(1<=R<=100)
输出格式:
一个正整数,表示使铁盘从小到大有序需要的最少翻转次数。
输入输出样例
5
2 4 3 5 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]铁盘整理的更多相关文章
- 洛谷 P2534 [AHOI2012]铁盘整理
P2534 [AHOI2012]铁盘整理 题目描述 输入输出格式 输入格式: 共两行.第一行为铁盘个数N(1<=N<=50),第二行为N个不同的正整数,分别为从上到下的铁盘的半径R.(1& ...
- BZOJ2824 AHOI2012 铁盘整理 【IDA*】
BZOJ2824 AHOI2012 铁盘整理 Description 在训练中,一些臂力训练器材是少不了的,小龙在练习的时候发现举重器械上的铁盘放置的非常混乱,并没有按照从轻到重的顺序摆放,这样非常不 ...
- BZOJ 2824: [AHOI2012]铁盘整理
BZOJ 2824: [AHOI2012]铁盘整理 标签(空格分隔): OI-BZOJ OI-搜索 Time Limit: 10 Sec Memory Limit: 128 MB Descriptio ...
- [AHOI2012]铁盘整理
题目描述 输入输出格式 输入格式: 共两行.第一行为铁盘个数N(1<=N<=50),第二行为N个不同的正整数,分别为从上到下的铁盘的半径R.(1<=R<=100) 输出格式: ...
- 【题解】洛谷P2532 [AHOI2012]树屋阶梯(卡特兰数+高精)
洛谷P2532:https://www.luogu.org/problemnew/show/P2532 思路 来自Sooke大佬的推导: https://www.luogu.org/blog/Sook ...
- (bzoj1337 || 洛谷P1742 最小圆覆盖 )|| (bzoj2823 || 洛谷P2533 [AHOI2012]信号塔)
bzoj1337 洛谷P1742 用随机增量法.讲解:https://blog.csdn.net/jokerwyt/article/details/79221345 设点集A的最小覆盖圆为g(A) 可 ...
- 洛谷p2370yyy2015c01的U盘题解
没什么特殊的想法 就是看自己很久没有更新关于题解类的文章了而已 (其实这是我好久之前做的, 只是把它从洛谷博客搬到了这里而已) 题目 首先分析题目要二分 他长成这个亚子太二分了 所以就要二分 最好是先 ...
- 洛谷P2532 [AHOI2012]树屋阶梯(Catalan数)
P2532 [AHOI2012]树屋阶梯 题目描述 输入输出格式 输入格式: 一个正整数N(1<=N<=500),表示阶梯的高度. 输出格式: 一个正整数,表示搭建方法的个数.(注:搭建方 ...
- 洛谷 P1103 书本整理(动规)
洛谷 P1103 书本整理 题目描述 Frank是一个非常喜爱整洁的人.他有一大堆书和一个书架,想要把书放在书架上.书架可以放下所有的书,所以Frank首先将书按高度顺序排列在书架上.但是Frank发 ...
随机推荐
- 分享知识-快乐自己:Struts2 前台日期到后台的日期格式转换
案例目录: 关键代码展示: DateConverter: package com.mlq.util; import com.opensymphony.xwork2.conversion.TypeCon ...
- python自动化开发学习 进程, 线程, 协程
python自动化开发学习 进程, 线程, 协程 前言 在过去单核CPU也可以执行多任务,操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换任务2,任务2执行0.01秒,在切换到任务3,这 ...
- 如何让DIV可编辑、可拖动
1.可编辑: <div id="move" contentEditable="true">可编辑</div> 设置contentEdit ...
- Python with MYSQL - sytax problem
Con= MySQLdb.connect(host=',db='test') cur=Con.cursor() cur.execute('insert into staff_daily(Date,Na ...
- JAVA堆内存和栈内存初步了解
一.堆内存和栈内存 程序运行时内存分配有三种:静态存储分配,栈式存储分配,堆式存储分配 1.静态存储分配: 在程序编译时就可以确定数据目标在运行时所需要的内存,因此在编译时就为其分配固定大小的内存. ...
- linux命令学习笔记(14):head 命令
head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显 示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾. .命令格式: hea ...
- 【leetcode刷题笔记】Search a 2D Matrix
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...
- Access中复制表
很多时候在Access中需要复制表,或只复制结构,源表名:a: 新表名:b (经测试中Access可用) 法一:select * into b from a where 1<>1 ...
- [转]PNG8和PNG24的区别
首先我们要知道: 1.png8和png24的根本区别,不是颜色位的区别,而是存储方式不同. 2.png8有1位的布尔透明通道(要么完全透明,要么完全不透明),png24则有8位(256阶)的布尔透明通 ...
- 启动新内核出现:No filesystem could mount root, tried: ext3 ext2 cramfs vfa
转载请注明出处:http://blog.csdn.net/qq_26093511/article/details/51841791 下载新编译的内核出现:No filesystem could mou ...