51Nod 1289:大魚吃小魚
阿新 • • 發佈:2018-12-06
https://www.51nod.com/Challenge/Problem.html#!#problemId=1289
有N條魚每條魚的位置及大小均不同,他們沿著X軸遊動,有的向左,有的向右。遊動的速度是一樣的,兩條魚相遇大魚會吃掉小魚。從左到右給出每條魚的大小和遊動的方向(0表示向左,1表示向右)。問足夠長的時間之後,能剩下多少條魚?
輸入
第1行:1個數N,表示魚的數量(1 <= N <= 100000)。 第2 - N + 1行:每行兩個數A[i], B[i],中間用空格分隔,分別表示魚的大小及遊動的方向(1 <= A[i] <= 10^9,B[i] = 0 或 1,0表示向左,1表示向右)。
輸出
輸出1個數,表示最終剩下的魚的數量。
輸入樣例
5
4 0
3 1
2 0
1 0
5 0
輸出樣例
2
如果魚的頭是向右的就把魚入棧,如果魚頭向左,就讓它向左走吃魚直到被吃或者走的盡頭。
#include<stdio.h> #define N 100020 int a[N]; int main() { int n,i,len,j,sum,temp,s; scanf("%d",&n); len=1; sum=0; while(n--) { scanf("%d%d",&s,&temp); if(temp==1) { a[len]=s; len++; } else { if(len==1) sum++; else { for(i=len-1;i>=1;i--) if(a[i]>=s) break; len=i+1; if(len==1) sum++; } } } printf("%d\n",sum+len-1); return 0; }
一道相似的題目:
2160:數字遊戲
現在有n個數字依次進入一個棧,每個數字a進入棧的時候,如果棧頂元素小於a,則會將棧頂元素彈出,新的棧頂元素如果仍然小於a,則會將新的棧頂元素繼續彈出,直到棧頂元素大於等於a為止,a才會加入棧。問n個數字依次進入後,最後棧裡的數字依次是?
輸入
輸入第一行一個整數n(n<=100000),表示有n個數字依次進入棧。
接下來n行,每行一個整數,表示第i個數字。
輸出
若干行,表示最後棧中的數字。
輸入樣例
5
5
3
2
4
1
輸出樣例
5
4
1
#include<stdio.h> #define N 100020 int a[N]; int main() { int n,i,j,num; scanf("%d",&n); i=1; n--; scanf("%d",&a[1]); while(n--) { scanf("%d",&num); for(j=i;j>=1;j--) { if(a[j]>=num) { a[j+1]=num; break; } } if(j==0) a[1]=num; i=j+1; } for(j=1;j<=i;j++) printf("%d\n",a[j]); }