【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,一经查实,立即删除!

相关文章

并行与并发

**并行&#xff1a;**多个CPU同时执行多个任务。比如&#xff1a;多个人同时做不同的事。 **并发&#xff1a;**一个CPU(采用时间片)同时执行多个任务。比如&#xff1a;秒杀、多个人做同一件事。

通俗理解条件熵

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

WebAssembly:随风潜入夜

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

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

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

jzoj1751-Span(每日C组)【并查集,贪心】

题目 有n个村&#xff0c;m条路&#xff0c;给n-1条路刷油漆连接n个村&#xff0c;让最长边与最短边的长度差最小。 输入输出&#xff08;建议跳过&#xff09; Input 第一行给出一个数字TOT&#xff0c;代表有多少组数据,Tot<6 对于每组数据&#xff0c;首先给出N&…

线程优先级

MAX_PRIORITY&#xff1a;10 MIN _PRIORITY&#xff1a;1 NORM_PRIORITY&#xff1a;5 -->默认优先级 2.如何获取和设置当前线程的优先级&#xff1a; getPriority():获取线程的优先级 setPriority(int p):设置线程的优先级 说明&#xff1a;高优先级的线程要抢占低优先级线…

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

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

列表

# 列表 a [20, 40] a a [50] # 将原列表的元素和新列表的元素依次复制到新的列表对象中 a.extend([10, 20]) # 将目标列表的所有元素添加到本列表的尾部&#xff0c;属于原地操作&#xff0c;不创建新的列表对象。 a.insert(2, 100) b a * 3 # 乘法扩展 生成一个新列表 …

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

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

班级日常 | 一天一瞬间!

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

jzoj1370-飞船【RMQ初见】

前言 RMQ就是一个在一个序列中来多次询问某段的最大值的快速的方法。其他自行度娘 正题 题目 一些成直线的星星&#xff0c;给出m段询问&#xff0c;求一段距离间最大的星星 输入输出与样例&#xff08;建议无视&#xff09; 输入 第一行输入N,M 接下来一行N个整数&#…

double类型进行比较排序

不用两个double直接进行强转是为了防止精度的损失 方式一&#xff1a; Overridepublic int compareTo(Object o) { // System.out.println("**************");if(o instanceof Goods){Goods goods (Goods)o;//方式一&#xff1a;if(this.price > goods.p…

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

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

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

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

jzoj1371-假期【RMQ】

前言 上一篇RMQ博客&#xff1a;http://blog.csdn.net/mr_wuyongcong/article/details/79253383 正题 题目 要给奶牛放假&#xff0c;每天有一定的快乐值&#xff08;有可能是负数&#xff09;&#xff0c;假期不能小于p天或大于q天&#xff0c;求最大快乐值 输入 第一行&a…

句法分析(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 的加载时间并减少部署包大小。 新建…

【jzoj】2018.2.5NOIP普及组——C组模拟赛

前言 今天第一次正式C组题&#xff0c;不过……比较恐怖。 正题 题目1&#xff1a;公牛和母牛&#xff08;jzoj1292&#xff09; 有n头牛&#xff0c;可以是公牛或母牛&#xff0c;每头公牛之间至少得有k头母牛。求方案数。 输入输出&#xff08;建议跳过&#xff09; Inpu…