【jzoj】2018.2.3NOIP普及组——D组模拟赛

前言

万年D组系列…

正题


题目1:数池塘(jzoj1898)

有一个地方有一些积水,连着的积水是一个池塘,求池塘数。

输入

第1行:由空格隔开的两个整数:N和M
第2..N+1行:每行M个字符代表约翰农场的一排方格的状态。每个字符或者是’W’或者是’.’,字符之间没有空格。

输出

第1行:约翰农场上的池塘数

样例输入

10 12
W……..WW.
.WWW…..WWW
….WW…WW.
………WW.
………W..
..W……W..
.W.W…..WW.
W.W.W…..W.
.W.W……W.
..W…….W.

样例输出

3

解题思路

深搜不解释。

代码

#include<cstdio>
#include<iostream> 
using namespace std;
int n,m,s;
char c;
bool a[101][101];
void dfs(int x,int y)
{if (x<1 || y<1 || x>n || y>m || a[x][y]) return;//退出a[x][y]=true;//封dfs(x+1,y);dfs(x-1,y);dfs(x,y+1);dfs(x,y-1);dfs(x+1,y+1);dfs(x-1,y-1);dfs(x+1,y-1);dfs(x-1,y+1);//搜
}
int main()
{//freopen("lkcount.in","r",stdin);//freopen("lkcount.out","w",stdout);scanf("%d%d",&n,&m);for (int i=1;i<=n;i++){for (int j=1;j<=m;j++){cin>>c;//用cin输入比较保险,昨天就是没用cin错了if (c=='.') a[i][j]=true;//封}}for (int i=1;i<=n;i++){for (int j=1;j<=m;j++)if (!a[i][j])//搜{dfs(i,j);s++;//累计数量}}printf("%d",s);
}

题目2:接苹果(jzoj1899)

有两颗苹果树,每分钟某一颗树会掉一颗苹果。开始在第一颗树下,只能移动c次的情况下在t秒最多能接到多少颗苹果。

输入

第1行:由空格隔开的两个整数:T和W
第2..T+1行:1或2(每分钟掉落苹果的树的编号)

输出

第一行:在贝茜移动次数不超过W的前提下她能接到的最多苹果数

样例输入

7 2
2
1
1
2
2
1
1

样例输出

6

解题思路

用dp,有两种情况就是移动或不移动,这里用三维数组
f[i][j][k]表示第i分钟,移动了j次,在第k颗树下(其实可以不用)

代码

#include<cstdio>
#include<iostream>
using namespace std;
int f[1001][31][2],t,w,a[1001],maxs;
int check(int t,int x)//能否接到苹果
{if (a[t]==x) return 1;return 0;
}
int main()
{//freopen("bcatch.in","r",stdin);//freopen("bcatch.out","w",stdout);scanf("%d%d",&t,&w);for (int i=1;i<=t;i++) scanf("%d",&a[i]);for (int i=1;i<=t;i++){f[i][0][0]=f[i-1][0][0]+check(i,1);//不移动maxs=max(maxs,f[i][0][0]);for (int j=1;j<=w;j++){f[i][j][0]=max(f[i-1][j-1][1]+check(i,2),f[i-1][j][0]+check(i,1));f[i][j][1]=max(f[i-1][j-1][0]+check(i,1),f[i-1][j][1]+check(i,2));//动态转移maxs=max(maxs,max(f[i][j][0],f[i][j][1]));//求最大值。}}printf("%d",maxs);
}

题目3:找数(jzoj1416)

输入一串序列,输出第k大的数。

输入

输入文件find.in,输入两行,第一行两个数N、K,N表示序列的长度,K表示要找在这个序列中的第K大的数。
第二行,N(N≤3000000)个数,用空格隔开.

输出

输出文件find.out,输出序列中的第K大的数。

样例输入

6 3
5 2 4 3 1 6

样例输出

4

自解

用小根堆存K个最大的数,然后输出堆顶

正解

c++算法库直接sort快排

代码

#include<cstdio>
#include<algorithm>
using namespace std;
int n,k,a[3000001],num,x;
void upA(int x)//维护堆的性质
{while (x>1 && a[x]<a[x/2]){swap(a[x],a[x/2]);x/=2;}
}
void downA(int x)//维护堆的性质
{int y=0;while (x*2<=num && a[x]>a[x*2] || x*2+1<=num && a[x]>a[x*2+1]){y=x*2;if (y+1<=num && a[y]>a[y+1]) y++;swap(a[x],a[y]);x=y;}
}
int main()
{//freopen("find.in","r",stdin);//freopen("find.out","w",stdout);scanf("%d%d",&n,&k);for (int i=1;i<=n;i++) {scanf("%d",&x);//输入if (num<k) {a[++num]=x;upA(num);}//前k个else if (x>a[1])//选大的{a[1]=x;//替换downA(1);//维护}}printf("%d",a[1]);//输出
}

题目4:最短路径(jzoj1417)

没错这道题就像题目一样,没错,就是递推(才不是什么最短路)。一个n*m的地方,不能走斜线,求最短数量。
From jzoj

输入

输入文件Sline.in,一行,两个数M,N,其中 2

输出

输出文件sline.out,输出最短路的走法总数.

样例输入

7 5

样例输出

210

解题思路

首先,我们可以从左边或下面来,所以f[i][j]=f[i-1]+f[j-1]。然后因为数据忒大,有不需要取膜,又容易超时。
所以这道题的方法是:禁忌·压位高精滚动反复递推

代码

#include<cstdio>
using namespace std;
int n,m,f[2][801];
int a[1601][61];
void add(int n1,int n2,int n3)
{int g=0;for (int i=1;i<=60;i++){a[n1][i]=a[n1][i]+a[n2][i]+g;g=a[n1][i]/100000000;a[n1][i]%=100000000;a[n3][i]=a[n1][i];}
}
void write(int n1)
{int w=60;while (a[n1][w]==0) w--;//找printf("%d",a[n1][w]);//输出for (int i=w-1;i>=1;i--){if (a[n1][i]<10000000) printf("0");//暴力判断前导0if (a[n1][i]<1000000) printf("0");if (a[n1][i]<100000) printf("0");if (a[n1][i]<10000) printf("0");if (a[n1][i]<1000) printf("0");if (a[n1][i]<100) printf("0");if (a[n1][i]<10) printf("0");printf("%d",a[n1][i]);}
}
int main()
{//freopen("sline.in","r",stdin);//freopen("sline.out","w",stdout);scanf("%d%d",&n,&m);if (m>n) {int t=m;m=n;n=t;}//避免错误for (int i=1;i<=m;i++) {f[0][i]=i;f[1][i]=n+i;}//对应高精度数组号a[f[1][1]][1]=1;//初值for (int i=1;i<=n;i++){for (int j=1;j<=m;j++){if (i!=1 || j!=1)add(f[(i-1)%2][j],f[i%2][j-1],f[i%2][j]);//加}}write(f[n%2][m]);
}

题目5:棋盘覆盖(jzoj1418)

一个N*N的棋盘,用“L”字方块(覆盖3格)覆盖除了特殊方块棋盘(不能重叠)。求覆盖方法。

输入

输入文件Chessboard.in,共两行,第一行一个数N为棋盘的大小,N满足条件N=2^K,1<=K<=10.
第二行,两个数x,y,表示棋盘中那一个与其它方格不同的位置,x表示行,y表示列.
From jzoj

输出

输出文件Chessboard.out,输出N行N列,共N×N个数,表示用L 型(占3 个小格)纸片覆盖棋盘上除特殊方格的所有部分,各纸片不得重叠的方法.其中的数表示L型纸片覆盖的顺序编号, 不同的L型纸片用不同的编号,同一个L型纸片占据的三个位置相同,编号从1开始,特殊方格用-1标志;每两个数之间用一个空格隔开,每行最末一个数后面没有空格.

样例输入

4
2 2

样例输出

2 2 3 3
2 -1 1 3
4 1 1 5
4 4 5 5

解题思路

用分治算法,不断分,然后计算子问题。
From me
From me

代码

#include<cstdio>
using namespace std;
int number,dx,dy,n,a[1025][1025];
void dfs(int x,int y,int ux,int uy,int s)//x,y表示位置,ux,uy表示特殊符号位置,s表示边长
{if (s==1) return;//退出number++;//int zx=x+s/2;int zy=y+s/2;//中间位置if (ux<zx && uy<zy)//特殊格子在左上{a[zx-1][zy]=number;a[zx][zy-1]=number;a[zx][zy]=number;//记录dfs(x,y,ux,uy,s/2);//分治dfs(zx,y,zx,zy-1,s/2);dfs(x,zy,zx-1,zy,s/2);dfs(zx,zy,zx,zy,s/2);}else if (ux<zx && uy>=zy){a[zx][zy-1]=number;a[zx-1][zy-1]=number;a[zx][zy]=number;dfs(x,y,zx-1,zy-1,s/2);dfs(x,zy,ux,uy,s/2);dfs(zx,y,zx,zy-1,s/2);dfs(zx,zy,zx,zy,s/2);}else if (ux>=zx && uy<zy){a[zx-1][zy-1]=number;a[zx-1][zy]=number;a[zx][zy]=number;dfs(x,y,zx-1,zy-1,s/2);dfs(zx,y,ux,uy,s/2);dfs(x,zy,zx-1,zy,s/2);dfs(zx,zy,zx,zy,s/2);}else if (ux>=zx && uy>=zy){a[zx-1][zy]=number;a[zx][zy-1]=number;a[zx-1][zy-1]=number;dfs(x,y,zx-1,zy-1,s/2);dfs(x,zy,zx-1,zy,s/2);dfs(zx,y,zx,zy-1,s/2);dfs(zx,zy,ux,uy,s/2);}
}
int main()
{//freopen("chessboard.in","r",stdin);//freopen("chessboard.out","w",stdout);scanf("%d%d%d",&n,&dx,&dy);a[dx][dy]=-1;//特殊方块dfs(1,1,dx,dy,n);//搜索for (int i=1;i<=n;i++){for (int j=1;j<=n;j++)printf("%d ",a[i][j]);printf("\n");}//输出
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324818.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通俗理解条件熵

转载自 通俗理解条件熵 通俗理解条件熵 前面我们总结了信息熵的概念通俗理解信息熵,这次我们来理解一下条件熵。 1、信息熵以及引出条件熵 我们首先知道信息熵是考虑该随机变量的所有可能取值&#xff0c;即所有可能发生事件所带来的信息量的期望。公式如下&#xff1a; 我…

WebAssembly:随风潜入夜

What&#xff1f; WebAssembly 是一种二进制格式的类汇编代码&#xff0c;可以被浏览器加载和并进一步编译成可执行的机器码&#xff0c;从而在客户端运行。它还可以作为高级语言的编译目标&#xff0c;理论上任何语言都可以编译为 WebAssembly。 我们知道汇编语言就是机器码的…

让java的多重继承成为现实!

点击上方蓝色关注我们&#xff01;大家好&#xff0c;我是雄雄&#xff0c;前两天给大家说了说java中的四种内部类&#xff0c;推文分别为&#xff1a;静态内部类和成员内部类方法内部类和匿名内部类在内部类的基础上&#xff0c;我们来看看今天的知识点儿。众所周知&#xff0…

通俗理解决策树算法中信息增益的

转载自 通俗理解决策树算法中信息增益的 通俗理解决策树算法中的信息增益 在决策树算法的学习过程中&#xff0c;信息增益是特征选择的一个重要指标&#xff0c;它定义为一个特征能够为分类系统带来多少信息&#xff0c;带来的信息越多&#xff0c;说明该特征越重要&#x…

DDD理论学习系列(6)-- 实体

1.引言 实体对应的英语单词为Entity。提到实体&#xff0c;你可能立马就想到了代码中定义的实体类。在使用一些ORM框架时&#xff0c;比如Entity Framework&#xff0c;实体作为直接反映数据库表结构的对象&#xff0c;就更尤为重要。特别是当我们使用EF Code First时&#xf…

班级日常 | 一天一瞬间!

点击上方蓝色关注我们&#xff01;欢迎来到今天的“一天一瞬间”专栏在学习word操作时&#xff0c;同学们的兴趣还是较高的&#xff0c;但是&#xff0c;比起“一天一个黑科技”来说&#xff0c;还是差了许多&#xff01;前面两天都是学的一些简单的DOS命令&#xff0c;比如进某…

ASP.NET Core Web 资源打包与压缩

本文将介绍使用的打包和压缩的优点&#xff0c;以及如何在ASP.NET Core应用程序中使用这些功能。 概述 在ASP.Net中可以使用打包与压缩这两种技术来提高Web应用程序页面加载的性能。通过减少从服务器请求的次数和减少资源文件的体积来提高加载性能。 打包是一地将多个文件&a…

班级日常分享 | 一天一瞬间!

点击上方蓝色关注我们&#xff01;介于最近同学们的学习劲头十足的样子&#xff0c;我和丁老师商量决定晚上不布置作业&#xff0c;看一部电影放松放松&#xff01;昨晚下晚自习后&#xff0c;零零散散的还有一部分同学在教室里面学习&#xff0c;值班老师都催促多次&#xff0…

句法分析(syntactic parsing)在NLP领域的应用是怎样的

转载自 句法分析&#xff08;syntactic parsing&#xff09;在NLP领域的应用是怎样的 句法分析&#xff08;syntactic parsing&#xff09;在NLP领域的应用是怎样的&#xff1f; 文章整理自郭江师兄问题回答&#xff08;被收录于知乎编辑推荐&#xff09;&#xff01;已取得…

新的学期、新的开始、新的付出、新的收获!

点击上方蓝色关注我们&#xff01;本文原创&#xff1a;王晓丹同学初次&#xff0c;我漫步在静静的校园&#xff0c;深情的黄昏&#xff0c;显得格外惹人喜爱。哇&#xff01;那是什么&#xff1f;我情不自禁的喊了出来&#xff0c;一颗石榴树 &#xff0c;引起了我满满的回忆&…

ASP.NET Core Web API 最小化项目

ASP.NET Core中默认的ASP.NET Core 模板中有Web API 模板可以创建Web API项目。 有时&#xff0c;只需要创建一个API&#xff0c;不需要关心Razor&#xff0c;本地化或XML序列化。通过删除无用的NuGet软件包和代码&#xff0c;可以提高 API 的加载时间并减少部署包大小。 新建…

LinkedHashSet VS HashSet

LinkedHashSet的使用 LinkedHashSet作为HashSet的子类&#xff0c;在添加数据的同时&#xff0c;每个数据还维护了两个引用&#xff0c;记录此数据前一个 数据和后一个数据。 优点&#xff1a;对于频繁的遍历操作&#xff0c;LinkedHashSet效率高于HashSet

隐马尔科夫模型-基本模型与三个基本问题

转载自 隐马尔科夫模型-基本模型与三个基本问题 隐马尔科夫模型-基本模型与三个基本问题 这次学习会讲了隐马尔科夫链&#xff0c;这是一个特别常见的模型&#xff0c;在自然语言处理中的应用也非常多。 常见的应用比如分词&#xff0c;词性标注&#xff0c;命名实体识别等…

日常技术分享 : 一定要注意replcaceAll方法,有时候会如你所不愿!

点击上方蓝色关注我们&#xff01;今天&#xff0c;踩过了一个雷&#xff0c;特此整理了一下&#xff0c;以防大家也被中招&#xff01;事情是这样的&#xff0c;在做一个项目时&#xff0c;需要用到String类的replcaceAll方法&#xff0c;可以这么说&#xff0c;该方法就是替换…

在微服务中如何管理数据

来自Stitch Fix团队的工程副总裁Randy Shoup在QCon纽约2017会议上讨论了如何在基于微服务的应用中管理数据和隔离持久化。他还介绍了将事件&#xff08;Event&#xff09;作为微服务的第一类构造。他介绍自己的团队将机器学习技术应用到了业务的各个组成部分&#xff0c;比如购…

jozj3419-最大利润【树形dp】

前言 树形dp是前天学的&#xff0c;题目也是前天做的&#xff0c;可博客却是今天发的。 正题 题目大意 一棵树一样的火车站&#xff0c;每个站点有不同的利润&#xff0c;不能连续选择相连的两个站点的利润&#xff0c;求最大利润。 输入输出&#xff08;建议无视&#xf…

隐马尔科夫模型-前向算法

转载自 隐马尔科夫模型-前向算法 隐马尔科夫模型-前向算法 在该篇文章中讲了隐马尔科夫模型&#xff08;HMM&#xff09;一基本模型与三个基本问题 隐马尔科夫模型-基本模型与三个基本问题&#xff0c;这篇文章总结一下隐马尔科夫链&#xff08;HMM&#xff09;中的前向与后…

线段树初见——区间询问与改变最大值

前言 昨天某B组讲主席树&#xff0c;然后就作死的去听了&#xff0c;也没听懂&#xff08;因为连线段树都不懂&#xff09;&#xff0c;然后好奇心就去问了一下老师线段树是个蛤&#xff0c;然后这篇博客就诞生了。 正题 首先线段树就是一个可以快速区间改变和询问的东东&am…

关系数据库理论

依赖 候选码 三大范式 公理系统 求最小函数的依赖集 例 解 模式分解