小米 oj 發獎勵(思維)
阿新 • • 發佈:2018-12-22
發獎勵
序號:#75難度:有挑戰時間限制:1000ms記憶體限制:10M
描述
小明老師準備給一些得到小紅花的小朋友發糖果做為獎勵。 假設有n個小朋友,每個小朋友擁有的小紅花為m(n)個,他讓這n個小朋友站成一排。要求: 1.每個小朋友至少發一個糖果 2.如果一個小朋友比相鄰的小朋友小紅花多,則發他的糖果也必須比相鄰的多 問小明最少要發多少個糖果?
輸入
每位小朋友的小紅花數量,使用逗號(,)分隔
輸出
最少需要發出的糖果
輸入樣例
96 19,9,35,74,22
輸出樣例
1 9
#include<iostream> #include<string.h> #include<stdio.h> #include<algorithm> using namespace std; int num[100005]; int candy[100005]; int n; int read(char *buf,int* num) { int cnt=0; int v; char *p = strtok(buf,","); while(p) { sscanf(p,"%d",&v); num[cnt++]=v; p = strtok(NULL,","); } return cnt; } char buf[100005]; int main() { while(~scanf("%s",buf)) { n=read(buf,num); memset(candy,0,sizeof(candy)); for(int i=1;i<n;i++) if(num[i]>num[i-1])candy[i]=candy[i-1]+1; for(int i=n-2;i>=0;i--) if(num[i]>num[i+1]) candy[i]=max(candy[i],candy[i+1]+1); int ans=0; for(int i=0;i<n;i++)ans+=candy[i]; printf("%d\n",ans+n); } return 0; }