题目讲解(1到5)

1

编写一个能够输出 Hello,World! 的程序。

提示:

  • 使用英文标点符号;
  • Hello,World! 逗号后面没有空格。
  • H 和 W 为大写字母。

输入格式

输出格式

输入输出样例

输入 #1复制

输出 #1复制

Hello,World!

这个不会写没啥讲的自裁吧,程序员的开始,一切罪恶的起点!!!!!

毁灭吧

2台阶问题

有 N 级台阶,你一开始在底部,每次可以向上迈 1∼K 级台阶,问到达第 N 级台阶有多少种不同方式。

输入格式

两个正整数 N,K。

输出格式

一个正整数 ans(mod100003),为到达第 N 级台阶的不同方式数。

输入输出样例

输入 #1复制

5 2

输出 #1复制

8

说明/提示

  • 对于 20%20% 的数据,1≤N≤10,1≤K≤3;
  • 对于 40%40% 的数据, 1≤N≤1000;
  • 对于 100%100% 的数据,1≤N≤100000,1≤K≤100。

题目大意肯定是非常容易理解的

1...反向推导->首先我们想要求得到第n阶,

我们可以枚举他的最后一步往前看

可以得到ans[n]=  ans[n-1]+ans[n-2]........ (从1到k) 但是k不能超过第n阶

不断的传下去最后一定会归于 ans[1]一个台阶需要几步

2...正向推导->首先我们想到一个台阶需要几步

一步(显然)

两个台阶嘞

有两种情况 1一步一步走两步 2一次走两步(前提是可以一次两步)

三个台阶嘞 只考虑最后一步 可以一步那就是加上ans[2],两步加上ans[1],三步加上ans[0]

有此完全可以看出我们只要枚举最后一步即可(其实与上面一样)

不断的往后退推到最后的未知数只有ans[0]和ans[1]很显然这两个我们知道

都为一

写法有两种可以递归(dfs)记忆化

也可以迭代(动态规划)

思路其实都一样

1递归(dfs)记忆化

#include <cstdio>
#include <cctype>
#include <vector>
#include <cstring>
#include <algorithm>
#include <iostream>using namespace std;
int kk[100000] = {0};int ans(int i,int n) {if (i == 0 || i == 1) {return 1;}else if (kk[i] > 0) {return kk[i];}else {int sum = 0;//当前有多少种for (int kl = 1;kl<=n&&kl<i;kl++){kk[i-kl] =ans(i-kl,n)%100003;sum=(sum+kk[i-kl])%100003;}if(n >= i)sum++;kk[i] = sum;return sum;}
}int main()
{    int x,y;cin >>x>>y;cout << ans(x,y);return 0;
}

2.迭代(dp)

#include <iostream>
using namespace std;int arr[100000] = {0};
int main() {int n, k;cin >> n >> k;arr[0] = 1;arr[1] = 1;for (int zi = 2;zi <= n;zi++) {for (int si = 1;si <= k && si <= zi;si++)arr[zi]=(arr[zi]+arr[zi - si])%100003;}cout << arr[n];return 0;
}

显然下面的方法代码更少推荐写下面的写法,可以迭代就不搞递归(建议) 

难度真的不大qwq

B3738 [信息与未来 2018] 素数方阵

题目描述

把前 n2 个素数从左上角开始按右、下、左、上、右、下、左、上……的顺序填入n×n 的方阵就得到了蛇形素数方阵。以下是 n=4 和 n=5 的蛇形素数方阵:

给出 n,你的任务是求出 n×n 的蛇形素数方阵,并输出其中某个方格中的数值。

素数,又称质数,是指除 11 和其自身之外,没有其他约数的大于 11 的正整数。

输入格式

输入一行三个正整数 n,x,y。

输出格式

输出一行一个整数,表示 n×n 蛇形素数方阵第 x 行第 y 列中的数字。

输入输出样例

输入 #1复制

5 1 4

输出 #1复制

7

输入 #2复制

5 4 3

输出 #2复制

79

说明/提示

样例解释

参考上图 n=5。

数据规模

所有数据满足 1≤x,y≤n≤20。

本题原始满分为 15pts15pts。

我相信你看到这个题目就会写,但是不知道如何写出来,这个故事相当的悲伤

写了半天发现还是没有把这个正方形搞出来

哎, 我是真的想哭呜呜呜

来教你们一招简单易懂的,就像是贪吃蛇一样,我们

需要一个地图起点表示arr[1][1]

k=1向右

k=2向下.....

每次走过的地方打下标签碰到了就回退平且改变方向

上代码看看

#include <iostream>using namespace std;int arr[500] = { 0 };//存放质数
int zi[100001] = { 0 };//质数筛选
int brr[21][21];//地图
int n, lu;int pan(int size) {if (size == 1)return 0;for (int j = 2;j < size;j++)if (size % j == 0) {return 0;}return 1;
}void start2() {lu = 1;for (int ll = 1;ll < 100001 && lu < 401;ll++) {if (pan(ll) == 1){arr[lu] = ll;lu++;}}
}void start1() {for (int lp = 1;lp <= 20;lp++)for (int li = 1;li <= 20;li++)brr[lp][li] = 0;
}//初始化//上面都是初始化,求素数,暴力求也是可以通过的
int main() {start2();start1();int x, y;cin >> n >> x >> y;int xl = 1, yl = 1;int k = 1;int ans = 1;//初始位置brr[1][1]=1;//打上标记if (xl == x && yl == y)cout << arr[ans] << endl;elsewhile(true){if (k == 1) {yl++;if (yl>n||yl<1||brr[xl][yl] == 1) {yl--;k++;}//碰到墙壁了else {ans++;brr[xl][yl] = 1;}}else if (k==2) {xl++;if (xl > n || xl < 1 || brr[xl][yl] == 1) {xl--;k++;}//碰到墙壁了else {ans++;brr[xl][yl] = 1;}}else if (k==3) {yl--;if (yl > n || yl < 1 || brr[xl][yl] == 1) {yl++;k++;}//碰到墙壁了else {ans++;brr[xl][yl] = 1;}}else {xl--;if (xl > n || xl < 1 || brr[xl][yl] == 1) {xl++;k=1;}//碰到墙壁了else {ans++;brr[xl][yl] = 1;}}if (x == xl && yl == y)break;}cout << arr[ans] << endl;return 0;
}

看着很长其实就这样,求素数很简单随便咋写都可以,我们最后只要得到他到底是第多少个素数既可

输出就结束了.

注意越界也是墙壁的 

碰到墙壁了 要返回以及转换方向

ok 很简单吧qwq (不简单噶了你)

P1147 连续自然数和

题目描述

对一个给定的正整数 M,求出所有的连续的正整数段(每一段至少有两个数),这些连续的自然数段中的全部数之和为 M。

例子:1998+1999+2000+2001+2002=100001998+1999+2000+2001+2002=10000,所以从 19981998 到 20022002 的一个自然数段为 M=10000 的一个解。

输入格式

包含一个整数的单独一行给出 M 的值(10≤M≤2,000,000)。

输出格式

每行两个正整数,给出一个满足条件的连续正整数段中的第一个数和最后一个数,两数之间用一个空格隔开,所有输出行的第一个按从小到大的升序排列,对于给定的输入数据,保证至少有一个解。

输入输出样例

输入 #1复制

10000

输出 #1复制

18 142 
297 328 
388 412 
1998 2002

我一看好家伙题目直白明了

数据给到了2,000,000

对半砍也就是1000000

普通的暴力可以拿到70分也可以没有想到优化那也行等于写完了

好吧其实靠前缀和就可以简单的拉满分数了

把求和提前算好时间复杂度降低了不少呀

而且前缀和肯定是学了的

没学那就是刷的少了(有这个题组的)

欧克话不多讲

上代码

#include <iostream>using namespace std;int arr[1000050] = { 0 };void start(int n) {arr[0] = 0;arr[1] = 1;for (int j = 2;j <= n / 2+1;j++)arr[j] = j + arr[j - 1];
}//前缀和int main() {int m;cin >> m;start(m);for (int kl = 0;kl <= m / 2-1;kl++) {for (int kk = kl + 2;kk <= m / 2+1;kk++) {if (arr[kk]- arr[kl] == m) {cout << kl + 1 << " " << kk << endl;break;}else if(arr[kk] - arr[kl] >m){break;//后面只会越来越大不可能有结果的}}}return 0;
}

循环到m/2-1是因为后面不会有可能有答案了

由于数据是递增的还可以二分优化,但是前缀和已经可以全部拿下了那就算了

简单啊真的简单qwq你为啥没写出来

啊啊啊啊啊

P1007 独木桥

题目背景

战争已经进入到紧要时间。你是运输小队长,正在率领运输部队向前线运送物资。运输任务像做题一样的无聊。你希望找些刺激,于是命令你的士兵们到前方的一座独木桥上欣赏风景,而你留在桥下欣赏士兵们。士兵们十分愤怒,因为这座独木桥十分狭窄,只能容纳 11 个人通过。假如有 22 个人相向而行在桥上相遇,那么他们 22 个人将无法绕过对方,只能有 11 个人回头下桥,让另一个人先通过。但是,可以有多个人同时呆在同一个位置。

题目描述

突然,你收到从指挥部发来的信息,敌军的轰炸机正朝着你所在的独木桥飞来!为了安全,你的部队必须撤下独木桥。独木桥的长度为 L,士兵们只能呆在坐标为整数的地方。所有士兵的速度都为 11,但一个士兵某一时刻来到了坐标为 0 或 L+1 的位置,他就离开了独木桥。

每个士兵都有一个初始面对的方向,他们会以匀速朝着这个方向行走,中途不会自己改变方向。但是,如果两个士兵面对面相遇,他们无法彼此通过对方,于是就分别转身,继续行走。转身不需要任何的时间。

由于先前的愤怒,你已不能控制你的士兵。甚至,你连每个士兵初始面对的方向都不知道。因此,你想要知道你的部队最少需要多少时间就可能全部撤离独木桥。另外,总部也在安排阻拦敌人的进攻,因此你还需要知道你的部队最多需要多少时间才能全部撤离独木桥。

输入格式

第一行共一个整数 L,表示独木桥的长度。桥上的坐标为 1,2,⋯ ,1,2,⋯,L。

第二行共一个整数 N,表示初始时留在桥上的士兵数目。

第三行共有 N 个整数,分别表示每个士兵的初始坐标。

输出格式

共一行,输出 22 个整数,分别表示部队撤离独木桥的最小时间和最大时间。22 个整数由一个空格符分开。

输入输出样例

输入 #1复制

4
2
1 3

输出 #1复制

2 4

说明/提示

对于 100% 的数据,满足初始时,没有两个士兵同在一个坐标,1≤L≤5 0≤N≤5×103,且数据保证 N≤L。

由于先前的愤怒,你已不能控制你的士兵。甚至,你连每个士兵初始面对的方向都不知道。因此,你想要知道你的部队最少需要多少时间就可能全部撤离独木桥。另外,总部也在安排阻拦敌人的进攻,因此你还需要知道你的部队最多需要多少时间才能全部撤离独木桥。

如果你能想到方向其实都是迷惑

两个人碰撞了那么最最终有任何的影响吗

一点都没有,相当于两个人穿过了对方

如何理解了这点那这题目也是嘎嘎乱杀

那就演变为了比较大小了

最大比一比

最小比一比

没了

#include<stdio.h>int max(int x,int y){
if(x>=y){return x;
}return y;
}int min(int j,int k){
if(j<=k){return j;
}
return k;
}int main(){
int l,m;
int a[99999];
scanf("%d%d",&l,&m);
for(int h=1;h<=m;h++){scanf("%d",&a[h]);
}
int maxe=0;
int mine=0;
for(int j=1;j<=m;j++){int kl=max(a[j],l+1-a[j]);int mi=min(a[j],l+1-a[j]);if(kl>maxe){maxe=kl;}if(mi>mine){mine=mi;}
}
printf("%d %d",mine,maxe);return 0;
}

是不是觉得自己都能写出来,确实是没有啥难的

最后这道考了点思维,不多呀

宝儿们,路很长你要慢慢的走

前进,远方!

ok结尾谢幕

嘟嘟嘟嘟嘟

下班啦啦!!!!!!

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

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

相关文章

C : DS二叉排序树之删除(详细思路解答)

Description 给出一个数据序列&#xff0c;建立二叉排序树&#xff0c;并实现删除功能 对二叉排序树进行中序遍历&#xff0c;可以得到有序的数据序列 Input 第一行输入t&#xff0c;表示有t个数据序列 第二行输入n&#xff0c;表示首个序列包含n个数据 第三行输入n个数据…

JS逆向实战——开发者工具检测

说明&#xff1a;仅供学习使用&#xff0c;请勿用于非法用途&#xff0c;若有侵权&#xff0c;请联系博主删除 作者&#xff1a;zhu6201976 一、背景 在JS逆向领域&#xff0c;Chrome开发者工具是核心&#xff0c;抓包、调试、看调用栈等都离不开它。可以说&#xff0c;逆向人…

Linux基础入门笔记

Linux基础入门笔记&#xff0c;具体可见下载链接 大家阅读时可善用目录功能&#xff0c;可以提高大家的阅读效率 下载地址&#xff1a;Linux笔记 初始linux 操作系统&#xff1a;操作系统是用户和计算机硬件之间的桥梁&#xff0c;调度和管理计算机硬件进行工作常见操作系统 W…

【算法Hot100系列】删除链表的倒数第 N 个结点

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

什么牌子猫粮比较好?质量口碑较好的主食冻干猫粮分享

由于猫咪是肉食动物&#xff0c;对蛋白质的需求很高&#xff0c;如果摄入的蛋白质不足&#xff0c;就会影响猫咪的成长。而冻干猫粮本身因为制作工艺的原因&#xff0c;能保留原有的营养成分和营养元素&#xff0c;所以冻干猫粮蛋白含量比较高&#xff0c;营养又高&#xff0c;…

自定义 spring-boot组件自动注入starter

1&#xff1a;创建maven项目 2&#xff1a;pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocati…

javaSE学习-4-类和对象

1. 面向对象的初步认知 1.1 什么是面向对象 面向对象编程&#xff08;OOP&#xff09;是一种程序设计范式&#xff0c;它将程序中的数据和操作数据的方法封装到对象中。在面向对象的世界里&#xff0c;一切都被视为对象&#xff0c;这些对象可以拥有数据&#xff08;成员变量&…

SQL面试题挑战01:打折日期交叉问题

目录 问题&#xff1a;SQL解答&#xff1a;第一种方式&#xff1a;第二种方式&#xff1a; 问题&#xff1a; 如下为某平台的商品促销数据&#xff0c;字段含义分别为品牌名称、打折开始日期、打折结束日期&#xff0c;现在要计算每个品牌的打折销售天数&#xff08;注意其中的…

【IDEA】Intellij IDEA相关配置

IDEA 全称 IntelliJ IDEA&#xff0c;是java编程语言的集成开发环境。IntelliJ在业界被公认为最好的Java开发工具&#xff0c;尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超…

lua安装

lua安装 1.Lua介绍 特点&#xff1a;轻量、小巧。C语言开发。开源。 设计的目的&#xff1a;嵌入到应用程序当中&#xff0c;提供灵活的扩展和定制化的功能。 luanginx&#xff0c;luaredis。 2.windows安装lua windows上安装lua&#xff1a; 检查机器上是否有lua C:\U…

双向链表、双向循环链表

目录 多级双向链表 力扣 430. 扁平化多级双向链表 双向循环链表 力扣 426. 将二叉搜索树转化为排序的双向链表 多级双向链表 力扣 430. 扁平化多级双向链表 你会得到一个双链表&#xff0c;其中包含的节点有一个下一个指针、一个前一个指针和一个额外的 子指针 。这个子指…

有损编码——Wyner-Ziv理论

有损编码是一种在信息传输和存储中常见的编码技术&#xff0c;其主要目标是通过牺牲一定的信息质量&#xff0c;以换取更高的压缩效率。相比于无损编码&#xff0c;有损编码可以在保证一定程度的信息还原的前提下&#xff0c;使用更少的比特数来表示信息。Wyner-Ziv理论是一种重…