一个早上做完了我真牛B

就是A*用于DFS啊,现在我才发现迭代加深真是个好东西。

poj3460 %了%了我们的目标是把它的顺序变对,那么第i个位置的值+1是要等于第i+1个位置的值的。对于一个操作,最多就能修正3个位置对应。这题我多迭代了一层时间就跑了多10倍有点恐怖

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std; int n,ans,c[];
int count()
{
int ret=;
for(int i=;i<n;i++)
if(c[i]+!=c[i+])ret++;
if(c[n]!=n)ret++;
return ret;
}
int u[];
void change(int l,int r,int be)
{
for(int i=;i<=n;i++)u[i]=c[i];
for(int i=l;i<=r;i++)c[be+i-l]=u[i];
for(int i=,j=;i<=n&&j<=n;i++,j++)
{
if(i==be)i=be+r-l+;
if(j==l)j=r+;
c[i]=u[j];
}
}
bool dfs(int k)
{
if(count()==)return true;
if(k>=ans)return false;
int t[];
for(int l=;l<=n;l++)
{
for(int r=l;r<=n;r++)
{
for(int be=;be+r-l<=n;be++)
{
if(l==be)continue;
memcpy(t,c,sizeof(t)); change(l,r,be);
int cc=count(); cc=cc%==?cc/:cc/+;
if(cc+k+<=ans)
{
if(dfs(k+))return true;
} memcpy(c,t,sizeof(c));
}
}
}
return false;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);c[]=;
for(int i=;i<=n;i++)scanf("%d",&c[i]); for(ans=;ans<=;ans++)
{
if(dfs())break;
}
if(ans<)printf("%d\n",ans);
else printf("5 or more\n");
}
return ;
}

poj3460

poj2286 这题写的有点丑。。很好想啊,就是看中间有最多有多少个是相等的。英语太烂没看题意结果被No moves needed卡了半小时

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
const int u[][]={{,,,,,,},
{,,,,,,}};
int c[],ans;
char ss[];int num;
int count()
{
int sa[];memset(sa,,sizeof(sa));
sa[c[]]++;sa[c[]]++;sa[c[]]++;
sa[c[]]++;sa[c[]]++;
sa[c[]]++;sa[c[]]++;sa[c[]]++;
return -max(sa[],max(sa[],sa[]));
}
void change(int w)
{
if(w==)
for(int i=;i<;i++)swap(c[u[][i]],c[u[][i+]]);
else if(w==)
for(int i=;i<;i++)swap(c[u[][i]],c[u[][i+]]);
else if(w==)
for(int i=;i>;i--)swap(c[i],c[i-]);
else if(w==)
for(int i=;i>;i--)swap(c[i],c[i-]);
else if(w==)
for(int i=;i>;i--)swap(c[u[][i]],c[u[][i-]]);
else if(w==)
for(int i=;i>;i--)swap(c[u[][i]],c[u[][i-]]);
else if(w==)
for(int i=;i<;i++)swap(c[i],c[i+]);
else if(w==)
for(int i=;i<;i++)swap(c[i],c[i+]);
}
bool dfs(int k)
{
if(count()==){num=c[];return true;}
if(k>=ans)return false; change();
if(count()+k+<=ans)
{
ss[k+]='A';
if(dfs(k+))return true;
}
change(); change();
if(count()+k+<=ans)
{
ss[k+]='B';
if(dfs(k+))return true;
}
change(); change();
if(count()+k+<=ans)
{
ss[k+]='C';
if(dfs(k+))return true;
}
change(); change();
if(count()+k+<=ans)
{
ss[k+]='D';
if(dfs(k+))return true;
}
change(); change();
if(count()+k+<=ans)
{
ss[k+]='E';
if(dfs(k+))return true;
}
change(); change();
if(count()+k+<=ans)
{
ss[k+]='F';
if(dfs(k+))return true;
}
change(); change();
if(count()+k+<=ans)
{
ss[k+]='G';
if(dfs(k+))return true;
}
change(); change();
if(count()+k+<=ans)
{
ss[k+]='H';
if(dfs(k+))return true;
}
change(); return false;
}
int main()
{
while(scanf("%d",&c[])!=EOF)
{
if(c[]==)break;
for(int i=;i<=;i++)scanf("%d",&c[i]); for(ans=;;ans++)
{
if(dfs())break;
}
if(ans==)printf("No moves needed\n");
else
{
for(int i=;i<=ans;i++)printf("%c",ss[i]);
printf("\n");
}
printf("%d\n",num);
}
return ;
}

poj2286

poj1084 表扬一下自己,写完没CE随便调了调就A了。这个一开始想了个很错的做法就是判断每根火柴删除会删除多少矩阵,结果其实删了一个就会对其他有影响。正确的做法是找个矩阵把它全删了,算删了一个,看删多少次。这样预估函数肯定比实际小

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std; int n,ans;
bool mp[][];
bool check_square(int L,int x,int y)
{
for(int j=y;j<=y+L--;j++)
if(mp[*x-][j]==false||mp[*(x+L-)-][j]==false)return false;
for(int i=x;i<=x+L--;i++)
if(mp[*i][y]==false||mp[*i][y+L-]==false)return false;
return true;
}
bool find_square(int &L,int &i,int &j)
{
for(L=;L<=n+;L++)
for(i=;i+L-<=n+;i++)
for(j=;j+L-<=n+;j++)
if(check_square(L,i,j)==true)
return true;
return false;
}
bool bp[][];
int count()
{
memcpy(bp,mp,sizeof(bp));
int L,i,j,cnt=;
while(find_square(L,i,j)==true)
{
for(int v=j;v<=j+L--;v++)
{
mp[*i-][v]=false;
mp[*(i+L-)-][v]=false;
} for(int u=i;u<=i+L--;u++)
{
mp[*u][j]=false;
mp[*u][j+L-]=false;
}
cnt++;
}
memcpy(mp,bp,sizeof(mp));
return cnt;
}
bool dfs(int k)
{
if(count()==)return true;
if(k>=ans)return false; int L,i,j;
bool zz=find_square(L,i,j);
for(int v=j;v<=j+L--;v++)
{
mp[*i-][v]=false;
if(count()+k+<=ans)
{
if(dfs(k+))return true;
}
mp[*i-][v]=true; mp[*(i+L-)-][v]=false;
if(count()+k+<=ans)
{
if(dfs(k+))return true;
}
mp[*(i+L-)-][v]=true;
} for(int u=i;u<=i+L--;u++)
{
mp[*u][j]=false;
if(count()+k+<=ans)
{
if(dfs(k+))return true;
}
mp[*u][j]=true; mp[*u][j+L-]=false;
if(count()+k+<=ans)
{
if(dfs(k+))return true;
}
mp[*u][j+L-]=true;
}
return false;
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int m;
scanf("%d%d",&n,&m);
memset(mp,true,sizeof(mp));
for(int i=;i<=m;i++)
{
int k;
scanf("%d",&k);
int mo=(k-)%(n+n+);
if(mo<n)mp[(k-)/(n+n+)*+][mo+]=false;
else mp[(k-)/(n+n+)*+][mo-n+]=false;
} for(ans=;;ans++)
{
if(dfs())break;
}
printf("%d\n",ans);
}
return ;
}

poj1084

0x28 IDA*的更多相关文章

  1. 【转】IDA Pro7.0使用技巧总结

    俗话说,工欲善其事,必先利其器,在二进制安全的学习中,使用工具尤为重要,而IDA又是玩二进制的神器,以前在使用IDA的时候,只是用几个比较常用的功能,对于IDA的其他功能没有去研究,于是本着学习的精神 ...

  2. 逆向工程 - Reveal、IDA、Hopper、HTTPS抓包 等

    目录: 一. iOS 如何做才安全 二.ipa文件 三.沙盒 中的数据 四.Reveal:查看 任何APP 的UI结构 五.反编译工具:IDA 六.反编译工具:Hopper Disassembler ...

  3. IDA的脚本IDC的一个简单使用

    目的:主要是想学习一下IDA的IDC的脚本的使用.这里做了一个小的测试. 这里使用的是VS2015Community来生成文件的. 一.编写测试程序: 这里先生成我们的目标数据. 然后编写测试程序.得 ...

  4. 安卓动态调试七种武器之孔雀翎 – Ida Pro

    安卓动态调试七种武器之孔雀翎 – Ida Pro 作者:蒸米@阿里聚安全 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的,人是 ...

  5. iOS程序逆向Mac下常用工具——Reveal、HopperDisassemble、IDA

    原文在此 一.Reveal 1 一般使用     Reveal是ITTY BITTY发布的UI分析工具,可以很直观的查看App的UI布局.如下图所示:     Reveal是需要付费的,需要89美元, ...

  6. IDA插件栈字符串识别插件

    该插件是一款可以自动识别栈上局部变量为字符串的插件,字符串形式如下,并自动的加上注释                                       如图:可以自动识别栈上的字符串 项目主 ...

  7. Android动态方式破解apk进阶篇(IDA调试so源码)

    一.前言 今天我们继续来看破解apk的相关知识,在前一篇:Eclipse动态调试smali源码破解apk 我们今天主要来看如何使用IDA来调试Android中的native源码,因为现在一些app,为 ...

  8. 计算机病毒实践汇总六:IDA Pro基础

    在尝试学习分析的过程中,判断结论不一定准确,只是一些我自己的思考和探索.敬请批评指正! 1. IDA使用 (1)搜索.下载并执行IDA Pro,对可执行程序lab05-01.dll进行装载,分别以图形 ...

  9. IDA在内存中dump出android的Dex文件

    转载自http://drops.wooyun.org/tips/6840 在现在的移动安全环境中,程序加壳已经成为家常便饭了,如果不会脱壳简直没法在破解界混的节奏.ZJDroid作为一种万能脱壳器是非 ...

随机推荐

  1. swiper套路

    swiper插件 quick start 基本结构 <div class="swiper-container"> <div class="swiper- ...

  2. Android线性渐变

    布局实现: 1. 在res中建立drawable文件夹. 2. 在drawable文件夹中建立shape.xml. 3. shape.xml的代码如下: <?xml version=" ...

  3. 【Oracle】创建角色

    任务:创建角色 1)创建角色sse_role,授予create session 权限 2)创建角色tblo_role,授予CREATE PROCEDURE, CREATE SEQUENCE, CREA ...

  4. django 安装运行

    pip install django pip list 查看版本 python -m django --version 新建django django-admin startproject mysit ...

  5. SqlServer动态变换库名

    declare @tname varchar(20),@num intset @tname='Players_Log_L10001'declare @sql Nvarchar(1000)=N'sele ...

  6. max 宏定义取消:error C2589: error C2059: 语法错误 : “::”

    原文链接:http://blog.csdn.net/danelumax2/article/details/9172465有修改! 一:关于Pcl和WIndef的冲突: 1. 错误输出 ./zlibra ...

  7. Eigen库对齐问题:declspec(align('16')) 的形参将不被对齐

    一:错误提示:error C2719: '_Val': formal parameter with __declspec(align('16')) won't be aligned 英文提示:erro ...

  8. 详解优动漫PAINT中的图层模式

    使用优动漫PAINT绘制漫画或者插画的时候,在其新建画布区域有一个基本颜色模式的选项,分别包括彩色模式.灰度模式和黑白位图模式,那么这三个模式有什么区别呢,我们在绘图的时候应该如何选择呢? 彩色模式: ...

  9. ArrayList集合如何存储基本数据类型

    ArrayList对象不能存储基本类型,只能存储引用类型的数据.类似 <int> 不能写,但是存储基本数据类型对应的包装类型是可以的. 所以,想要存储基本类型数据, <> 中的 ...

  10. 写shell工具类,一个常用实例

    简述: 当我们常用到某些指令时,我们就需要将这个命令进行封装.封装的设计和扩展,因人而异.但为了每个人都能够了解到这个命令,常需要写出这个类的help. 关键字: 函数.getopts 函数 通过自定 ...