两个代码,一个简单并AC,后一个复杂有问题,都是线性的处理,求调后一个

P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G

```cpp #include<bits/stdc++.h> using namespace std; long long N,n1[100001],n2[100000],i,j,s,l,ii,iii,min1,min2,ans=0,sum=0; bool cmp(int x,int y) { return x<y; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>N; for(i=1;i<=N;i++) { cin>>n1[i]; sum+=n1[i]; } n1[i]=INT_MAX; memset(n2,0,sizeof(n2)); sort(n1+1,n1+1+N,cmp); n2[1]=n1[1]+n1[2]; ans+=n2[1]; s=1; l=1; i=3; j=3; while(i<=N||l<s) { if(n1[j]>n2[l]) { min1=n2[l]; n2[l]=0; l++; if(l<=s&&n1[j]>n2[l]) { min2=n2[l]; n2[l]=0; l++; } else { min2=n1[j]; j++; } } else { min1=n1[j]; j++; if(n1[j]>n2[l]) { min2=n2[l]; n2[l]=0; l++; } else { min2=n1[j]; j++; } } i=j; ans+=min1+min2; s++; n2[s]=min1+min2; } cout<<ans; return 0; } ```
by 天南星魔芋 @ 2023-10-23 16:51:01


|