51Nod 1279

上一层a窄于下一层b,则盘子c>a&&c<b时,是到达不了b的,所以预处理井,a<b时,b=a;

这时,井就成了一个上宽下窄的井,从下开始比较,盘子的卡到一个位置,那这里之下的井就不用再看了。

 1 #include<stdio.h>
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<string.h>
 5 using namespace std;
 6 int main(){
 7     int n,m;
 8     scanf("%d%d",&n,&m);
 9     int a[n],b[m];
10     for(int i=0;i<n;i++){
11         scanf("%d",&a[i]);
12         if(a[i]>a[i-1]&&i!=0){
13             a[i]=a[i-1];
14         }
15     }
16     int sum=0,flag=0;
17     int w=n-1;
18     for(int i=0;i<m;i++){
19         scanf("%d",&b[i]);
20         while(a[w]<b[i]){
21             w--;
22         }
23         if(w>=0){
24             sum++;
25             w--;
26         }
27     }
28     printf("%d",sum);
29 }

原文地址:https://www.cnblogs.com/precious-LZY/p/10329918.html

时间: 2024-11-01 20:36:56

51Nod 1279的相关文章

51nod 1279 单调栈

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1279 1279 扔盘子 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 有一口井,井的高度为N,每隔1个单位它的宽度有变化.现在从井口往下面扔圆盘,如果圆盘的宽度大于井在某个高度的宽度,则圆盘被卡住(恰好等于的话会下去). 盘子有几种命运:1.掉到井底.2.被卡住.3.落到别的盘子上方. 盘子

51NOD 1279 扔盘子(二分 + 思维)

传送门 有一口井,井的高度为N,每隔1个单位它的宽度有变化.现在从井口往下面扔圆盘,如果圆盘的宽度大于井在某个高度的宽度,则圆盘被卡住(恰好等于的话会下去). 盘子有几种命运:1.掉到井底.2.被卡住.3.落到别的盘子上方. 盘子的高度也是单位高度.给定井的宽度和每个盘子的宽度,求最终落到井内的盘子数量. 如图井和盘子信息如下: 井:5 6 4 3 6 2 3 盘子:2 3 5 2 4 最终有4个盘子落在井内. 本题由 @javaman 翻译. Input 第1行:2个数N, M中间用空格分隔,

51nod 1279 扔盘子

题目链接在这儿 如果上面一层窄,下面再宽也没用. 那么可以根据输入获得一个单调的栈,这个栈是经过选择的.比如输入例子的5 6 4 3 6 2 3,将变成5 5 3 3 3 2 2 .最后一层为栈顶,接着来一个盘子判断栈顶(亦即坑底部)能否容纳,不可则出栈再判断,可则认为放置这个盘子入这层,这层消失.统计一下放置了多少次即可. #include <bits/stdc++.h> using namespace std; const int maxN = 1e5 + 5; int N, M, S;

1279 扔盘子(51nod)

题目链接 http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1279 这道题要求的就是当顶被封之前有多少盘被扔下去= =当顶被封住时 即使下面的盘子再小也不能扔下去 我们用a[]保存井的宽度,数组b[]来保存盘子的大小 首先盘子j要是能到达第i米,则需要满足min(a[0~i])>=b[j]; 所以我们只需保存最小值便可 1 #include<stdio.h> 2 #include<string.h>

51nod 1201 整数划分(dp)

题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1201 题解:显然是一道dp,不妨设dp[i][j]表示数字i分成j个一共有几种分法. 那么转移方程式为: dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1] 表示将i - 1划分为j个数,然后j个数都+1 还是不重复,将i - 1划分为j - 1个数,然后j - 1个数都+1,再加上1这个数. 然后就是j的范围要知道1+2+

51nod 1138 连续整数的和(数学)

题目描述: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1138 给出一个正整数N,将N写为若干个连续数字和的形式(长度 >= 2).例如N = 15,可以写为1 + 2 + 3 + 4 + 5,也可以写为4 + 5 + 6,或7 + 8.如果不能写为若干个连续整数的和,则输出No Solution. Input 输入1个数N(3 <= N <= 10^9). OutPut 输出连续整数中的第1个数,如果有多

51nod 1463 找朋友(线段树+离线处理)

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1463 题意: 思路: 好题! 先对所有查询进行离线处理,按照右区间排序,因为k一共最多只有10个,所有在该区间内的B数组,每次枚举K值,通过这样的方式来得到另外一个B值.但是这样得到的B值它在B数组中的位置必须在当前数的左边.如下图:(j为当前数在B数组中的位置,pos为计算得到的另一个B值在数组中的位置) 这两个数的和记录在pos中,这里pos的位置必须在j的左边,假

51nod 1437

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1437 1437 迈克步 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 收藏 关注 有n只熊.他们站成一排队伍,从左到右依次1到n编号.第i只熊的高度是ai. 一组熊指的队伍中连续的一个子段.组的大小就是熊的数目.而组的力量就是这一组熊中最小的高度. 迈克想知道对于所有的组大小为x(1 ≤ x ≤ n

51nod 1272 思维/线段树

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1272 1272 最大距离 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 给出一个长度为N的整数数组A,对于每一个数组元素,如果他后面存在大于等于该元素的数,则这两个数可以组成一对.每个元素和自己也可以组成一对.例如:{5, 3, 6, 3, 4, 2},可以组成11对,如下(数字为下标):