一个早上做完了我真牛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. call by value 和 call by reference 的区别

    引用自https://zhidao.baidu.com/question/340173099.html Call by Value就是传值的方式,函数调用时是把实参的值传给形参,函数调用结束后形参的值 ...

  2. shell学习第二弹-进阶

    1.linux系统中配置文件执行顺序 1)用户登录系统,首页调用/etc/profile文件初始化所有bash用户的默认特征 2)然后shell依次查找~/.bash_profile,~/.bash_ ...

  3. MyProject

    [PROJECT_20190101]20371230[PROJECT_20190101]

  4. python第三方模块大杂烩

    Python单元测试框架之pytest---如何执行测试用例 unittest单元测试框架实现参数化 (用例有相似参数断言时使用,可以精简代码) python中标示符作用详解 一篇文章让你彻底搞清楚P ...

  5. PCL:PCL与MFC 冲突总结

    (1):max,min问题 MFC程序过程中使用STL一些类编译出错,放到Console Application里一切正常.比如: void CMyDialog::OnBnClickedButton1 ...

  6. 超实用的JavaScript代码段

    1. 判断日期是否有效 JavaScript中自带的日期函数还是太过简单,很难满足真实项目中对不同日期格式进行解析和判断的需要.JQuery也有一些第三方库来使日期相关的处理变得简单,但有时你可能只需 ...

  7. Vue双向绑定

    vue的双向数据绑定的原理相信大家都十分了解:主要是通过ES5的Object对象的defineProperty属性:重写data的set和get函数来实现的. 该方法允许精确的添加或者修改对象的属性: ...

  8. el7上的开机自动执行脚本

    /etc/rc.local 是 /etc/rc.d/rc.local的软连接 默认, /etc/rc.local 是有可执行权限的, 只要 给 /etc/rc.d/rc.local 加上可执行权限即可 ...

  9. Asp 日期格式化问题 沙比作者,我改过来。

    Asp 日期格式化问题 投稿:mdxy-dxy 字体:[增加 减小] 类型:转载 时间:2009-06-14我要评论 asp做网站经常遇到日期格式处理问题,介绍一个有用的vbscript函数forma ...

  10. VUE 利用 webpack 给生产环境和发布环境配置不同的接口地址

    转载地址: https://blog.csdn.net/gebitan505/article/details/58166055 VUE 利用 webpack 给生产环境和发布环境配置不同的接口地址 前 ...