一个早上做完了我真牛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. MAVEN 杂记

    MAVEN中央仓库 http://repo.maven.apache.org/maven2http://repo1.maven.org/maven2/http://mvnrepository.com/ ...

  2. cloudfoundry service broker 制作

    实验室这边需要制作service broker.从今天开始将精力投入其中.

  3. Python基本数据类型之字符串str

    字符串 定义:它是一个有序的字符的集合,用于存储和表示基本的文本信息,‘’或“”或‘’‘ ’‘’中间包含的内容称之为字符串 字符串的结构类型为'...' "..." "' ...

  4. BZOJ2134: 单选错位(期望乱搞)

    Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1101  Solved: 851[Submit][Status][Discuss] Descripti ...

  5. poj1094Sorting It All Out 拓扑排序

    做拓扑排序的题目,首先要知道两条定理: 1.最后得到的拓扑数组的元素个数如果小于n,则不存在拓扑序列.  (有圈) 2.如果一次入队的入度为零的点数大于1,则拓扑序列不唯一. (关系不确定) 本题有一 ...

  6. C# 6.0新加特性

    1.自动属性的增强 1.1.自动属性初始化 (Initializers for auto-properties) C#4.0下的果断实现不了的. C#6.0中自动属性的初始化方式 只要接触过C#的肯定 ...

  7. 位姿检索PoseRecognition:LSH算法.p稳定哈希

    位姿检索使用了LSH方法,而不使用PNP方法,是有一定的来由的.主要的工作会转移到特征提取和检索的算法上面来,有得必有失.因此,放弃了解析的方法之后,又放弃了优化的方法,最后陷入了检索的汪洋大海. 0 ...

  8. The features of Swift

    The features of Swift are designed to work together to create a language that is powerful, yet fun t ...

  9. Mysql 5.7 for windows 免安装版(解压版)安装和配置

    网上写的不近详细,这里重新整理下. 准备: 1.windows操作系统 2.mysql 的解压版压缩文件 第一步: 解压mysql的压缩包到你的安装目录,因为是虚拟机,这里我就安装在C盘下:C:\my ...

  10. Nginx+php-fpm 502 504问题

    常出现502,504错误 思路: 增大nginx与php-fpm通信时的缓存文件大小与个数 静态绑定5个php-fpm进程,减少频率启动进程的开销 利用sock文件代替tcp端口通信 解决办法: 调整 ...