C. C. Blog

Security Research, Algorithm and Data Structure

51Nod 1279 扔盘子

题目

有一口井,井的高度为N,每隔1个单位它的宽度有变化。现在从井口往下面扔圆盘,如果圆盘的宽度大于井在某个高度的宽度,则圆盘被卡住(恰好等于的话会下去)。

盘子有几种命运:1、掉到井底。2、被卡住。3、落到别的盘子上方。

盘子的高度也是单位高度。给定井的宽度和每个盘子的宽度,求最终落到井内的盘子数量。

思路

小口下面的大口没用,让井变递减,n+m匹配

代码

c++ #include<bits/stdc++.h> #define ll long long #define db double using namespace std; int n,m; int w[50020],d[50020]; int main(){ scanf("%d%d",&n,&m); scanf("%d",&w[1]); for(int i=2;i<=n;i++){ scanf("%d",&w[i]); if(w[i]>w[i-1]) w[i]=w[i-1]; } for(int i=1;i<=m;i++){ scanf("%d",&d[i]); } int p=n,ans=0; for(int i=1;i<=m&&p>0;i++){ while(p>0){ if(d[i]<=w[p]){ break; } else{ p--; } } if(p==0) break; ans++; p--; } cout<<ans<<endl; return 0; }

  • 本文作者: CCWUCMCTS
  • 本文链接: https://ccwucmcts.github.io/posts/33095/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!