[TOC]
1166-C
没啥好说的,二分法函数lower_bound和upper_bound要会用。在algorithm里
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #include<iostream> #include<algorithm> using namespace std;
typedef long long ll;
int main(){ ll a[200001]={0}; int n; cin>>n; for(int i=1;i<=n;++i) {cin>>a[i]; a[i]=abs(a[i]); } sort(a+1,a+1+n); ll sum=0; for(int i=1;i<n;++i) sum+=((upper_bound(a+i,a+1+n,2*a[i])-a)-i-1); cout<<sum<<endl;
}
|
1155-D
动态规划是给人做的嗷?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| #include<iostream> #include<algorithm> using namespace std; typedef long long ll;
int main(){ int n,x; cin>>n>>x; ll a[300001]={0}; ll dp[3][300001]={0}; for(int i=1;i<=n;++i) cin>>a[i]; ll res=0; for(int i=1;i<=n;++i) { dp[0][i]=a[i]+max(dp[0][i-1],(ll)0); res=max(res,dp[0][i]); } for(int i=1;i<=n;++i) { dp[1][i]=a[i]*x+max(max(dp[1][i-1],dp[0][i-1]),(ll)0); res=max(res,dp[1][i]); } if(n>1) dp[2][2]=a[2]+a[1]*x; res=max(res,dp[2][2]); for(int i=3;i<=n;++i) { dp[2][i]=a[i]+max(dp[2][i-1],dp[1][i-1]); res=max(res,dp[2][i]); } cout<<res<<endl; return 0; }
|