2 条题解

  • 1
    @ 2025-7-4 16:36:30

    一个比楼下还要好想的贪心,连脑子是什么都不知道

    注意到股市的变化趋势是一定是若干个交替出现,O(n)O(n)刷一遍,谷就all in,峰就all out,哈哈,赚麻了。

    于是就有了一个你一定可以比我写的更简洁的代码:

    #include<bits/stdc++.h>
    #define int long long
    using namespace std;
    const int N=1e5+10;
    double a[N],money=1;
    int gu[N],n,tot;
    signed main(){
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		double x;
    		cin>>x;
    		if(x==a[tot])continue;//去了一下重,也可以unique 
    		a[++tot]=x;
    	}
    	n=tot;
    	for(int i=1;i<=n;i++){
    		if(i==1||i==n)continue;
    		if(a[i]>a[i-1]&&a[i]>a[i+1])gu[i]=1;
    		if(a[i]<a[i-1]&&a[i]<a[i+1])gu[i]=-1;
    	}
    	for(int i=1;i<=n;i++)if(gu[i]){if(gu[i]==1)gu[1]=-1;break;}
    	for(int i=n;i>=1;i--)if(gu[i]){if(gu[i]==-1)gu[n]=1;break;}
    	for(int i=1;i<=n;i++){
    		if(gu[i]==-1)money/=a[i];
    		if(gu[i]==1)money*=a[i];
    	}
    	cout<<fixed<<setprecision(1)<<money;
    	return 0;
    }
    
    

    信息

    ID
    310
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    (无)
    递交数
    15
    已通过
    10
    上传者