1000 Problem A

时间限制 : 40/20 MS(Java/Others) | 内存限制 : 65536/32768 KB(Java/Others)

Submits : 110 | Solved : 24

题目描述

给定一组无序数值,数值的大小在1到百万之间,数值的个数在10-50万个之间。现需要找出其中第5到第10小的整数。

输入要求

一组非0整数,(个数>=10个),0为结束标志。

输出要求

其中第5到第10小的整数。每输出一个整数换行。

输入样例

1
2
3
4
5
6
7
8
9
10
0

输出样例

5
6
7
8
9
10

// An highlighted block
#include<iostream>
using namespace std;
int a[1000];
int n = 0, k;
int partition(int l, int r)
{int i = l, j = r+1;while(true){while(a[++i]<a[l] && i<r);while(a[--j]>a[l]);if(i>=j)break;swap(a[i], a[j]);}swap(a[l], a[j]);return j;
}
int quick_sort(int l, int r)
{if(l<r){int p = partition(l, r);if(p>=9)   quick_sort(l, p-1);else if(p<=4)quick_sort(p+1, r);else{quick_sort(l, p-1);quick_sort(p+1, r);} }
}
int main(){while(cin>>k){if(k==0)break;a[n++] = k;}quick_sort(0, n-1);for(int i=4; i<=9; i++)cout << a[i] << endl;return 0;
}
#include<iostream>
using namespace std;
int a[500001]; //全局才能不超时
int find(int low,int high,int k)
{int temp=a[low];int low_temp=low;int high_temp=high;while(low<high){while(low<high && a[high]>=temp)high--;a[low]=a[high];while(low<high && a[low]<=temp)low++;a[high]=a[low];}a[low]=temp;if(low==k)return a[low];else if(low>k)return find(low_temp,low-1,k);elsereturn find(low+1,high_temp,k); //因为是下标,所以是K }
int main()
{int x,i,num;for(num=0;;num++){cin>>x;if(x==0) break;a[num]=x;}for(i=5;i<=10;i++){x=find(0,num-1,i-1);cout<<x<<endl;}
} 

1001 Problem B

时间限制 : 2000/1000 MS(Java/Others) | 内存限制 : 65536/32768 KB(Java/Others)

Submits : 55 | Solved : 7

题目描述

对于一个2行N列的走道。现在用12或22的砖去铺满。问有多少种不同的方式(请用递推方式求解)。如果N很大,需要高精度计算。下图是一个2行17列的走道的某种铺法:

输入要求

一个整数N,N<=1000。

输出要求

共有多少种铺法。

输入样例

30

输出样例

715827883

分析

1 大整数的加法用string
2 铺砖问题:
每次铺砖时考虑的情况大致类似,所以可以用递归求解。根据最后剩余的列数,我们将本问题分成两种情况:

A:最后剩余一列,那么假设把这列去掉后,其铺砖情况与n-1时的情况一样,而加上后,也只有一种情况所以方法数位pave(n-1)

B:最后剩余两列,那么把这两列先去掉后和n-2的情况一样,加上这两列后一共有三种情况:12竖着放2列,12横着放,22直接填满。因为12竖着放和A情况重复,所以方法数为pave(n-2)*2

综上:方法总数=pave(n-1)+2*pave(n-2)

// An highlighted block
#include<iostream>
#include <algorithm>
#include<string>
using namespace std;
//用string实现大整数加法
string myadd(string a,string b){reverse(a.begin(),a.end());//字符串翻转reverse(b.begin(),b.end());int len;if(a.length()>b.length()){len=a.length(); //记录长的长度while(b.length()==len) b+=" ";//末尾补齐}else{len=b.length(); while(a.length()==len) a+=" ";}int i=0,t=0;string ans;while(i<len){t+=a[i]-'0'+b[i]-'0';ans+=(t%10+'0');//拼接t/=10;i++;}if(t>0) ans+=t+'0';//进位加上reverse(ans.begin(),ans.end());return ans;
}int main(){int n;string dp[1200];dp[0]="1";dp[1]="1";dp[2]="3";for(int i=3;i<=1000;i++){dp[i]=myadd(dp[i-1],myadd(dp[i-2],dp[i-2]));}while(cin>>n){  cout<<dp[n]<<endl;}return 0;
}

1002 Problem C

时间限制 : 2000/1000 MS(Java/Others) | 内存限制 : 65536/32768 KB(Java/Others)
Submits : 56 | Solved : 11

题目描述

一个N×N的街区,左上角为[1,1],右下角为[N,N],(N<100)。现要求出从左上角到右下角的路径总数,每次只能向下或向右走。

路径中有M个街区有障碍(M<10),不能通过,但不会形成到不了终点的情况。

每条路上的汇总路径数都要对10000取余,以免数据溢出。

输入要求

第一行:两个整数N和M;分别表示街区维度和障碍数;

第二行开始M行:障碍所在的街区。

输出要求

输出满足题意的路径数。

输入样例
3 1
3 1

输出样例
5

// An highlighted block
# include<iostream>
using namespace std;
int dp[101][101];  // 保存走到每个街区的路数int main()
{for(int i=0;i<=100;i++)for(int j=0;j<=100;j++)dp[i][j] = 1;int n,m;  // 街区的维数和障碍数cin >> n >> m;while(m--)  // 将每个有障碍的街区置为0 {int a, b;cin >> a >> b;dp[a][b] = 0;}for(int i=1; i<=n; i++)for(int j=1; j<=n; j++){if(dp[i][j] != 0)  //不考虑已经被置为0的有障碍的街区 {if(i==1 && j!=1)  // 给第一行街区赋值,不包括初始位置 dp[i][j] = dp[i][j-1];else if(i!=1 && j==1)  // 给第一列街区赋值,不包括初始位置dp[i][j] = dp[i-1][j];else if(i!=1 || j!=1)  //除初始位置的其他位置 dp[i][j] = (dp[i][j-1] + dp[i-1][j]) % 10000 ; // 每个街区的路径数为左边街区的路径数和上方路径数之和 }}cout << dp[n][n] << endl; return 0;
}

练习1-递推(找数字\街区\铺砖)相关推荐

  1. MT【103】二阶递推找规律

    评:如果直接找$a_n$的二阶递推式:$a_{n+2}-2\sqrt{2}a_{n+1}-a_n=0$有根号,不利于估计尾数. 转载于:https://www.cnblogs.com/mathstud ...

  2. 【递推】Ybt_平铺方案

    题目大意 用 2∗12 * 12∗1 或 2∗22 * 22∗2 的瓦片,平铺 2∗n2 * n2∗n 矩形的方案数? 其中, 0<=n<=2500 <= n <= 2500& ...

  3. Codeforces 1327 E. Count The Blocks(递推找规律)

    题意: 给出一个 n n n,求 1 0 n 10^n 10n 内长度为 1 1 1到 n n n的块分别有多少个.块的含义是连续相同数字的长度. 第一眼以为数位 d p dp dp 暴力打表出前几项 ...

  4. *【HDU - 1517】【POJ - 2505】A Multiplication Game(博弈,递推找规律或SG函数)

    题干: Stan and Ollie play the game of multiplication by multiplying an integer p by one of the numbers ...

  5. 牛客网 水题 递推找规律

    链接: https://www.nowcoder.com/acm/contest/91/E 来源:牛客网 小Y买了很多苹果,但他很贪吃,过了几天一下就吃剩一只了.每一天小Y会数出自己的苹果个数X,如果 ...

  6. 经典算法——数字三角形的三种解题方法:递推、记忆化搜索、动态规划

    上题目链接: http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/1730.html  递推方法: i ...

  7. 【递推】 铺砖2!!!

    铺砖2 序言 这篇博客我还是准备讲一讲递推这个板块的题.反正我是觉得基本上所有的递推题只要找到了递推式,那都是小case. 题目 现在上题: 题目描述 对于一个2行N列的走道.现在用1 * 2,2 * ...

  8. 【数字信号处理】线性常系数差分方程 ( 根据 “ 线性常系数差分方程 “ 与 “ 边界条件 “ 确定系统是否是 “ 线性时不变系统 “ 案例二 | 修改边界条件 | 使用递推方法证明 )

    文章目录 一.根据 " 线性常系数差分方程 " 与 " 边界条件 " 确定系统是否是 " 线性时不变系统 " 案例 1.使用递推方法证明 2 ...

  9. 【数字信号处理】线性常系数差分方程 ( 根据 “ 线性常系数差分方程 “ 与 “ 边界条件 “ 确定系统是否是 “ 线性时不变系统 “ 案例 | 使用递推方法证明 )

    文章目录 一.根据 " 线性常系数差分方程 " 与 " 边界条件 " 确定系统是否是 " 线性时不变系统 " 案例 1.使用递推方法证明 2 ...

最新文章

  1. numpy中的cov(方差计算)简单介绍
  2. java分布式锁解决方案 redisson or ZooKeeper
  3. Asp.net MVC生命周期
  4. 脑电分析系列[MNE-Python-12]| 注释连续数据
  5. ASP.NET Core Cookie SameSite
  6. html文字置顶标签,HTML的marquee标签怎么用?
  7. ie6 offsetWidth/offsetHeight无效
  8. Visual Studio 2015 单元测试(c++初试)
  9. python不定参数的函数实现_python传入不定参数是什么
  10. 策略模式和工厂模式的区别_设计模式系列 — 策略模式
  11. 信息周刊:随意设置电脑密码存在安全隐患
  12. 3.mysql的主从原理是什么_mysql 的主从实现原理
  13. Dell XPS BIOS强制降级方法
  14. 算法设计-天下会评选一级弟子
  15. 戴口罩写代码,程序员干脆穿越到了古代
  16. 深搜(不撞南墙不回头),迷宫问题
  17. IDEA-第一个Javaweb项目
  18. 72个免费学习网站,涵盖所有,你值得拥有!【非推广】
  19. 已知三角形三边,如何使用Python计算三角形的面积
  20. 社会工程学之信息刺探

热门文章

  1. Django项目——生鲜市场的买卖家全栈开发
  2. Android 实现护眼模式
  3. BotVS配置托管者-基于新浪云
  4. 亲测好用的caj文件转换成带目录的文字版PDF文件工具
  5. 前端作品-奥迪汽车响应式网站
  6. 学习闲谈:玩王者之感悟人生
  7. UML学习笔记之状态图
  8. 深层解读:唯品会、乐蜂、聚美的那些事
  9. 另一个角度看快手,耀眼的不止是1.38万亿市值
  10. 2、OpenSceneGraph中添加节点、删除节点、隐藏节点以及添加开关的用法