TypeDB Forces 2023 C. Remove the Bracket
链接:https://codeforces.com/contest/1787/problem/C
题意:给定数组a数n和s,再由
其中n,s<=2e5,a[i]<=2e5.
观察发现
代码:
#define int long long
using namespace std;
template <typename T> void read(T &t) {
t=0; char ch=getchar(); int f=1;
while (ch<'0'||ch>'9') { if (ch=='-') f=-1; ch=getchar(); }
do { (t*=10)+=ch-'0'; ch=getchar(); } while ('0'<=ch&&ch<='9'); t*=f;
}
template <typename T> void write(T t) {
if (t<0) { putchar('-'); write(-t); return; }
if (t>9) write(t/10);
putchar('0'+t%10);
}
int a[200100],mx[200100],mi[200100],f[200100][3];
void solve(){
int n,s;cin>>n>>s;
for(int i=1;i<=n;i++) read(a[i]);
for(int i=2;i<=n-1;i++){
if(s>a[i]){
mi[i]=0,mx[i]=a[i];
continue;
}
int minx=a[i]-s,maxx=s;
int u=min(minx,maxx),v=max(minx,maxx);
mi[i]=u,mx[i]=v;
}
mi[1]=mx[1]=a[1],mi[n]=mx[n]=a[n];
int ans=0;
for(int i=1;i<=n;i++){
f[i][1]=min(f[i-1][0]+mx[i-1]*mx[i],f[i-1][1]+mi[i-1]*mx[i]);
f[i][0]=min(f[i-1][0]+mx[i-1]*mi[i],f[i-1][1]+mi[i-1]*mi[i]);
}
ans=min(f[n][0],f[n][1]);
cout<<ans<<endl;
}
signed main(){
int T;read(T);
while(T--) solve();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】