一个早上做完了我真牛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. 乐字节-Java8核心特性实战-接口默认方法

    JAVA8已经发布很久,是自java5(2004年发布)之后Oracle发布的最重要的一个版本.其中包括语言.编译器.库.工具和JVM等诸多方面的新特性,对于国内外互联网公司来说,Java8是以后技术 ...

  2. Python基本数据类型之数字int

    数字 int(x, base=None) 将x转换为一个整数.base为按照多少进制进行转换 float(x) 将x转换到一个浮点数. complex(x) 将x转换到一个复数,实数部分为 x,虚数部 ...

  3. P3805 【模版】manacher算法

    题目描述 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 字符串长度为n 输入输出格式 输入格式: 一行小写英文字符a,b,c...y,z组成的字符串S 输出格 ...

  4. P1982 小朋友的数字

    题目描述 有 n 个小朋友排成一列.每个小朋友手上都有一个数字,这个数字可正可负.规定每个 小朋友的特征值等于排在他前面(包括他本人)的小朋友中连续若干个(最少有一个)小朋 友手上的数字之和的最大值. ...

  5. javascript中天气接口案例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. Win10 BackgroundTask

    1.这里面详细的说明了后台任务的搭建 调用等 提示: 1.BackgroundTaskRegistration 里面有这两个事件 OnCompleted/Progress 主要用来UpdateUI 这 ...

  7. sql语句参数化问题

    select  @PageSize * from tets SELECT 在WHERE 之前都不能参数化. TOP 只能做字符串运行.

  8. python网络编程part1

    1. 网络架构 单机 单机游戏 以下两个基于网络的 CS架构 客户端游戏 cs--->client客户/server服务 你自己是客户端(消费)--->服务端(收钱) 服务端(应用程序)一 ...

  9. JS for循环的应用: 打印三角形

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. geohash 算法原理及实现方式

    转自:http://www.cnblogs.com/dengxinglin/archive/2012/12/14/2817761.html geohash 算法原理及实现方式 1.geohash 特点 ...