NC232000. A.《落花》&&《红衣集》
描述
输入描述
共3行:
第一行包含一个整数( ), 表示路的长度(路上有个点)。
第二行包含个整数,表示第家花店出售花的价格。
第三行包含个整数,表示第家花店出售的花的美丽值。
输出描述
共一行,输出按照题面中的方法,最终会花多少钱。
示例1
输入:
5 1 3 2 5 2 3 4 1
输出:
3
Python3 解法, 执行用时: 107ms, 内存消耗: 20992K, 提交时间: 2021-12-26 14:22:50
n = int(input()) A = list(map(int,input().split())) B = list(map(int,input().split())) s = A[0] # 花费的钱 hFlower = B[0] # 当前花的美丽值 i = 1 while i + 1 < n: if B[i] > hFlower: if (i + 2 < n) and (B[i + 1] > B[i] or (B[i + 1] == B[i] and A[i + 1] < A[i])): s += A[i + 1] hFlower = B[i + 1] else: s += A[i] hFlower = B[i] i += 1 i += 1 print(s)
C 解法, 执行用时: 31ms, 内存消耗: 1912K, 提交时间: 2021-12-26 23:44:49
#include<stdio.h> int main() {long a[100000]={0},b,c[100000]={0},i,d,e,sum=0; scanf("%d",&b); for(i=1;i<b;i++) scanf("%ld",&c[i]); for(i=1;i<b;i++) scanf("%ld",&a[i]); for(i=2,d=a[1],e=c[1];i<b;) {if(a[i]>d) {if(a[i]>a[i+1]) d=a[i],e=c[i]; else if(a[i]<a[i+1]) d=a[i+1],e=c[i+1]; else if(a[i]==a[i+1]) {if (c[i]>c[i+1]) d=a[i+1],e=c[i+1]; else d=a[i],e=c[i];} i+=2,sum+=e; } else i++; } printf("%ld",sum+c[1]); }
C++ 解法, 执行用时: 72ms, 内存消耗: 1272K, 提交时间: 2021-12-26 19:27:17
#include<bits/stdc++.h> using namespace std; int a[100001]; int b[100001]; int main() { int n,i,j=1; long long sum=0; cin>>n; for(i=1;i<n;i++ ) cin>>a[i]; for(i=1;i<n;i++) cin>>b[i]; sum=a[1]; for(i=2;i<n;i++) { if(b[i]<=b[j]) continue; if(i+1==n) sum+=a[i]; else { if(b[i]==b[i+1]) j=a[i]<a[i+1]?i:i+1; else j=b[i]>b[i+1]?i:i+1; sum+=a[j]; i++; } } cout<<sum<<endl; }