标签:== 开始 www. 一个 ios put bsp 个数 也有
Input第1行:2个数N, M中间用空格分隔,N为井的深度,M为盘子的数量(1 <= N, M <= 50000)。
第2 - N + 1行,每行1个数,对应井的宽度Wi(1 <= Wi <= 10^9)。
第N + 2 - N + M + 1行,每行1个数,对应盘子的宽度Di(1 <= Di <= 10^9)Output输出最终落到井内的盘子数量。Sample Input
7 5 5 6 4 3 6 2 3 2 3 5 2 4
Sample Output
4
刚开始想的是用两个队列来维护,但是.......后来用两个数组来存放盘子和井的宽度由于用到了两重循环结果TLE了
#include<bits/stdc++.h> #define maxn 50010 using namespace std; int main() { int n,m; int i,j; int flag; int logo; int a[maxn],b[maxn]; scanf("%d%d",&n,&m); a[0] = 0; for(i=1; i<=n; i++) { scanf("%d",&a[i]); } for(i=0; i<m; i++) { scanf("%d",&b[i]); } flag = n; for(j=0; j<m; j++) { logo = 1; for(i=0; i<flag; i++) { if(b[j] > a[i]) { flag = i; logo = 0; } } if(logo == 1) flag--; if(flag == 0) { printf("%d\n",j); break; } } return 0; }
然后看了大神的博客发现时间复杂度可以简化到O(n),具体的方法就是让井的下层宽度小于或者等于上层宽度,然后从上往下以此比较
#include<bits/stdc++.h> #include<string.h> #define maxn 50010 using namespace std; int main() { int n,m; int i,j; int flag; int a[maxn],b[maxn]; scanf("%d%d",&n,&m); for(i=1; i<=n; i++) { scanf("%d",&a[i]); if(i >= 2) a[i] = min(a[i],a[i-1]); } flag = 0; for(j=0; j<m; j++) { scanf("%d",&b[j]); while(a[n] < b[j]) n--; if(n > 0) { flag++; n--; } } printf("%d\n",flag); return 0; }
也有人用栈来解题
#include<iostream> #include<cstring> #include<math.h> #include<stdlib.h> #include<cstring> #include<cstdio> #include<utility> #include<algorithm> #include<map> #include<stack> using namespace std; typedef long long ll; const int Max = 1e5+5; const int mod = 1e9+7; const int Hash = 10000; const int INF = 1<<30; const ll llINF = 1e18; int n, m; int well[Max], plate[Max]; int main( ) { //freopen("input.txt", "r", stdin); while(cin>>n>>m) { int ans = 0, Min = INF; for(int i=0; i<n; i++) scanf("%d", well+i); for(int i=0; i<m; i++) scanf("%d", plate+i); //预处理,用单调栈来处理数据 stack<int> st; for(int i=0; i<n; i++) { if(well[i]<Min) Min = well[i]; st.push(Min); } int k = 0; while(!st.empty() && k<m)//井满或者盘子用尽都结束 { if(st.top()<plate[k])//盘子大继续出栈 { st.pop( ); continue; } ans++;//在这个位置卡住一个盘子 st.pop( ); k++; } cout<<ans<<endl; } return 0; }
标签:== 开始 www. 一个 ios put bsp 个数 也有
原文地址:http://www.cnblogs.com/ruruozhenhao/p/7617015.html