打卡信奥刷题(3668)用C++实现信奥题 P12234 [蓝桥杯 2023 国 Java A] 最大算式
P12234 [蓝桥杯 2023 国 Java A] 最大算式
题目描述
给定nnn个非负整数AiA_iAi,你可以在不改变这些数顺序的前提下任意在他们之间插入+,∗,(,)\tt{+},\tt{*},\tt{(},\tt{)}+,∗,(,)四种符号。
请问在得到的算式合法的前提下,算式的结果最大可以是多少?
由于结果很大,你只需要输出答案对109+710^9 + 7109+7取模的结果即可。
输入格式
输入的第一行包含一个整数nnn。
第二行包含nnn个整数,分别表示A1,A2,⋯ ,AnA_1, A_2, \cdots, A_nA1,A2,⋯,An,相邻两个整数之间使用一个空格分隔。
输出格式
输出一行包含一个整数表示答案。
输入输出样例 #1
输入 #1
7 1 2 1 1 1 2 1输出 #1
27说明/提示
样例说明
(1+2)×(1+1+1)×(2+1)=27(1 + 2) \times (1 + 1 + 1) \times (2 + 1) = 27(1+2)×(1+1+1)×(2+1)=27。
评测用例规模与约定
- 对于40%40\%40%的评测用例,n≤5000n \leq 5000n≤5000;
- 对于所有评测用例,2≤n≤1052 \leq n \leq 10^52≤n≤105,0≤Ai≤1090 \leq A_i \leq 10^90≤Ai≤109。
C++实现
#include<bits/stdc++.h>usingnamespacestd;longlonga[100005];intmain(){longlongn,l=0,t=0,ans=1;cin>>n;for(longlongi=1;i<=n;i++){longlongx;cin>>x;if(x!=0){a[++t]=x;//删除0}}for(longlongi=1;i<=t;i++){if(a[i]==1){if(l==0){if(i<t){//边界a[i+1]++;}}else{if(i<t){//边界if(a[l]<=a[i+1]||a[l]==2){//取小的加,注意特判2a[l]++;}else{a[i+1]++;}}else{a[l]++;}}}elseif(a[i]>1){l=i;}}for(longlongi=1;i<=t;i++){ans=(ans*a[i])%1000000007;}cout<<ans;return0;}后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容