题解
木板接水
http://www.nowcoder.com/questionTerminal/dee0bcab26a648ad9999bc891d460034
跟leetcode第42题接雨水相同。
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h> int main() { int T; int a,b,c,n; int sum,max=0,maxIndex; int *data=(int*)malloc(sizeof(int)*1e5); int start; while(scanf("%d",&T)!=EOF) { for(int i=0;i<T;i++) { sum=0; max=0; maxIndex=0; scanf("%d",&n); for(int j=0;j<n;j++) { scanf("%d",&data[j]); if(max<data[j]) { max=data[j]; maxIndex=j; } } a=data[0]; start=0; for(int j=1;j<=maxIndex;j++) { if(data[j]>=a) { sum+=a*(j-start); a=data[j]; start=j; } } a=data[n-1]; start=n-1; for(int j=n-2;j>=maxIndex;j--) { if(data[j]>=a) { sum+=a*(start-j); a=data[j]; start=j; } } printf("%d\n",sum); } } return 0; }