今天,阳光正好,适合敲代码,诸事皆宜。

先来两道简单的模拟题。

第一道

机器翻译

输出为5.

代码思路:很明显需要用到队列来存单词,在建立一个bool数组来存储队列中有没有这个单词,需不需要向外界查询,如果需要并且队列可以容下,则加入队列并将bool数组标记在队列中有该单词,如果队列容不下,则将队头弹出,并用bool数组标记弹出的数字在该队列中没有。

代码:

#include<bits/stdc++.h>
using namespace std;
queue<int> ss;
bool mp[];
int n,m;
int main()
{
int i,j,t,ans=;
cin>>m>>n;
for(i=;i<n;i++)
{
cin>>t;
if(ss.size()>m)
{
int f=ss.front();
mp[f]=;
ss.pop();
}
if(mp[t]==)
{
ss.push(t);
ans++;
mp[t]=;
}
}
cout<<ans<<endl;
return ;
}

第二道

神奇的幻方

输出为:

8 1 6
3 5 7
4 9 2
思路:按题中步骤执行即可
首先找到1的位置,他在x=1,y=n/2+1;
然后判断若x在第一行,但不在最后一列,就让下一个数在x=n,y++的位置;
若不在第一行,在最后一列,就让下一个数在x--,y=1的位置;
若在第一行最后一列,就让下一个数在x++,y的位置;
若既不在最后一行也不在最后一列,并且右上方没有数字,则下一个数在x--,y++的位置;
以上四个都不满足就在x++,y的位置;
代码:
#include<bits/stdc++.h>
using namespace std;
int a[][];
int main()
{
int n,i,j,x,y;
cin>>n;
x=;y=n/+;
for(i=;i<=n*n;i++)
{
a[x][y]=i;
if(x==&&y!=n)
{
x=n;y++;
}
else if(y==n&&x!=)
{
y=;x--;
}
else if(x==&&y==n)
{
x++;
}
else if(a[x-][y+]==)
{
x--;y++;
}
else
x++;
}
for(i=;i<=n;i++)
{
for(j=;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
return ;
}

一道二分的题

灵能探索

链接:https://ac.nowcoder.com/acm/contest/639/A
来源:牛客网
思路:二分边界是从[灵能的最小值,灵能总和],check()函数的书写:循环数组,累加如果大于等于mid的值,则让con++,s=0,继续循环直到结束。判断con的值是否大于等于题中输入的组数,大于返回1,证明mid的值还可以在大,就让l=mid+1,ans=mid,如果con的值不大于,证明mid的值大了,则需要r=mid-1,在进行判断找出合适的mid的值。

代码:

#include<bits/stdc++.h>
using namespace std;
const long long N=;
long long n,k,ans,a[N];
long long check(long long x)
{
long long i,j,s=,con=;
for(i=;i<n;i++)
{
s+=a[i];
if(s>=x)
{
con++;
s=;
}
}
if(con>=k)
return ;
return ;
}
int main()
{
long long i,j,minx=,sum=;
long long l,r,mid;
cin>>n>>k;
for(i=;i<n;i++)
{
cin>>a[i];
minx=min(minx,a[i]);
sum+=a[i];
}
l=minx;r=sum;
while(l<=r)
{
mid=(l+r)/;
if(check(mid))
{
l=mid+;
ans=mid;
}
else
r=mid-;
}
cout<<ans<<endl;
}

一个乍一看是一道bfs搜索题,然而他却是到递推题。

好心酸。。。。。

过河卒

链接:https://ac.nowcoder.com/acm/contest/639/B
来源:牛客网

先说说bfs的思路:从(1,1)开始搜索,遇到马或者超界就不放入队列里,最后如果队列到达了终点则ans++;

代码:可惜只过了75%的数据

#include<bits/stdc++.h>
using namespace std;
const int mod=;
int n,m,x,y,ans;
int xx[]={,},yy[]={,};
int v[][];
int vis[][];
struct node
{
int a,b;
};
void bfs(int X,int Y)
{
vis[X][Y]=;
node t;
t.a=X;t.b=Y;
queue<node> p;
p.push(t);
while(!p.empty())
{
node g=p.front();
p.pop();
if(g.a==n&&g.b==m)
{
ans++;
continue;
}
for(int i=;i<;i++)
{
int w=g.a+xx[i];
int l=g.b+yy[i];
if(v[w][l]!=&&vis[w][l]!=&&w>=&&w<=n&&l>=&&l<=m)
{
p.push(node{w,l});
}
}
}
return ;
}
int main()
{
int i,j;
cin>>n>>m>>x>>y;
v[x][y]=;
v[x-][y-]=;
v[x-][y-]=;
v[x-][y+]=;
v[x-][y+]=; v[x+][y-]=;
v[x+][y-]=;
v[x+][y+]=;
v[x+][y+]=;
bfs(,);
cout<<ans%mod<<endl;
return ;
}

正解:递推dp[i][j]=dp[i-1][j]+dp[i][j-1]

现将马的所有可去的位置用v[][]的二维数组标记上,然后将表格的第一行和第一列dp[][]赋值为1,如果途中遇到马的位置,则停下结束循环,马下面的将不会走故而可以结束循环,最终用二重循环从(2,2)开始计算如果不是马的位置则dp[i][j]=(dp[i-1][j]+dp[i][j-1])%mod,否则dp[i][j]=0;

最终输出dp[n][m]%mod的值,在这里特别声明一定要在计算dp[i][j]的时候也要取mod,因为数字很大容易超限,导致错误。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=;
ll n,m,ans,x,y;
int x1[]={,-,-,,,,,-,-};
int yy[]={,,,,,-,-,-,-};
ll dp[][];
ll v[][];
int main()
{
ll i,j;
cin>>n>>m>>x>>y;
v[x][y]=;
for(i=;i<=;i++)
{
if(x+x1[i]>=&&y+yy[i]>=)
v[x+x1[i]][y+yy[i]]=;
}
for(i=;i<=n;i++)
{
if(v[i][]==)
dp[i][]=;
else
break;
}
for(j=;j<=m;j++)
{
if(v[][j]==)
dp[][j]=;
else
break;
}
for(i=;i<=n;i++)
{
for(j=;j<=m;j++)
{
if(v[i][j]==)
dp[i][j]=(dp[i-][j]+dp[i][j-])%mod;
else
dp[i][j]=;
}
}
cout<<dp[n][m]%mod<<endl;
return ;
}

ACM之旅仍在继续,加油!!少年

 

回顾二分与bfs(或者说是递推)和简单模拟的更多相关文章

  1. P1002 过河卒 【递推、简单动规】

    题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为“马拦过河卒 ...

  2. POJ 2506 Tiling (递推 + 大数加法模拟 )

    Tiling Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7965   Accepted: 3866 Descriptio ...

  3. Chapter1 递归与递推

    Chapter 1 递归与递推 时间复杂度(转载自yxc大佬) 一般ACM或者笔试题的时间限制是1秒或2秒. 在这种情况下,C++代码中的操作次数控制在 107107 为最佳. 下面给出在不同数据范围 ...

  4. 从一道NOI练习题说递推和递归

    一.递推: 所谓递推,简单理解就是推导数列的通项公式.先举一个简单的例子(另一个NOI练习题,但不是这次要解的问题): 楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可 ...

  5. 02python算法-递推

    递推 1什么是递推?:根据已有节点的值,以及规律推出之后节点的值 2为什么要用递推:简单的解决有规矩事件 3怎么用?: 我们举个经典的例子: 如果1对兔子每月能生1对小兔子,而每对小兔在它出生后的第3 ...

  6. HOJ 2148&POJ 2680(DP递推,加大数运算)

    Computer Transformation Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4561 Accepted: 17 ...

  7. PKU 2506 Tiling(递推+高精度||string应用)

    题目大意:原题链接有2×1和2×2两种规格的地板,现要拼2×n的形状,共有多少种情况,首先要做这道题目要先对递推有一定的了解.解题思路:1.假设我们已经铺好了2×(n-1)的情形,则要铺到2×n则只能 ...

  8. 第46套题【STL】【贪心】【递推】【BFS 图】

    已经有四套题没有写博客了.今天改的比较快,就有时间写.今天这套题是用的图片的形式,传上来不好看,就自己描述吧. 第一题:单词分类 题目大意:有n个单词(n<=10000),如果两个单词中每个字母 ...

  9. hdu 5335 Walk Out(bfs+斜行递推) 2015 Multi-University Training Contest 4

    题意—— 一个n*m的地图,从左上角走到右下角. 这个地图是一个01串,要求我们行走的路径形成的01串最小. 注意,串中最左端的0全部可以忽略,除非是一个0串,此时输出0. 例: 3 3 001 11 ...

随机推荐

  1. Windows完成端口编程

    Windows完成端口编程目录一 基本概念二 OVERLAPPED数据结构三 完成端口的内部机制创建完成端口完成端口线程的工作原理线程间数据传递线程的安全退出 一 基本概念       设备---wi ...

  2. Ruby元编程:动态添加类属性及其实际应用

    上个星期测试道的Monkey老师和我聊到测试用例参数过多的问题,其实这样的问题在我这里也同样经历过.比如我的测试用例必须面对不同的测试环境,每个环境有无数的参数,开发的最初阶段,因为参数少,所以就放在 ...

  3. 条款16:成对使用new和delete时要使用相同的形式

    请牢记: 如果在new表达式中使用[],必须在相应的delete表达式中也使用[]. new[]  对应  delete[] 如歌在new表达式中不适用[],一定不要在相应的delete表达式中使用[ ...

  4. 3012C语言_数据

    第二章 数据 2.1 数据类型 2.1.1 数据类型决定 1. 数据占内存字节数 2. 数据取值范围 3. 其上可进行的操作 2.2基本数据类型 2.2.1分类 基本类型 类型 符号 关键字 字节 1 ...

  5. 3011C语言_基础知识

    第一章  基础知识 1.1  基本框架 //任何一个c语言程序都必须包括以下格式: int main(int argc, char *argv[] ) { : } //这是c语言的基本结构,任何一个程 ...

  6. Java分割中英文,并且中文不能分割一半?

    最近准备入其他坑位.在面试过程中,遇到下面这题笔试题,拿出来分享分享. 题目:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串.但是要保证汉字不被截半个,如“我ABC”4, ...

  7. Liferay6.1 配置友好的URL映射

    说明:以下内容和官方文档相差不大,如果您英文较好,建议直接去读官方文档,地址是:https://dev.liferay.com/develop/tutorials/-/knowledge_base/6 ...

  8. SpringBoot2.1.6 整合CXF 实现Webservice

    SpringBoot2.1.6 整合CXF 实现Webservice 前言 最近LZ产品需要对接公司内部通讯工具,采用的是Webservice接口.产品框架用的SpringBoot2.1.6,于是采用 ...

  9. spring 5.x 系列第11篇 —— 整合memcached (xml配置方式)

    文章目录 一.说明 1.1 XMemcached客户端说明 1.2 项目结构说明 1.3 依赖说明 二.spring 整合 memcached 2.1 单机配置 2.2 集群配置 2.3 存储基本类型 ...

  10. 2019.ccpc女生赛-wfinal总结

    2019ccpc女生赛离它结束有四天了,在这个期间我想了很多,想了想还是决定写这个总结.作为这个队伍唯一的一名大一队员,我很庆幸,能跟着两个学姐一起打比赛,计爱玲师姐,即将工作,张莹俐学姐.这估计都是 ...