QFNU-ACM 2020.10.16 Trating
B - Power Sequence
根据题意可以知道,当c等于1的时候,有最大的差值。则当每次暴力的时候,和大于10^9*10^5的时候就可以直接break了。
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN=1e5+10; ll n,a[MAXN]; int main(){ cin>>n; memset(a,0,sizeof(a)); for(int i=0;i<n;i++) cin>>a[i]; sort(a,a+n); ll ans=1000000000000000000; for(int i =1;i<=100000;i++){ ll pp=1,nn=0; int flag=1; for(int j =0;j<n;j++){ if(pp>100000000000000) { flag=0; break; } nn+=abs(pp-a[j]); pp*=i; } if(flag) ans=min(ans,nn); } cout<<ans<<endl; return 0; }
D - Drinks Choosing
自己想的太麻烦了,主要还是没理解透题意。后来一直忘记初始化数组。
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN=1e5+10; int main(){ int n,m,pot,k[1007]; cin>>n>>m; memset(k,0,sizeof(k)); // cout<<pot<<"#@##"<<endl; for(int i =0;i<n;i++){ int x; cin>>x; k[x]++; } int ans=0; int good=0,bad=0; for(int i =1;i<=m;i++){ bad += k[i]%2; good += k[i]/2*2; } ans = good+(bad+1)/2; cout<<ans<<endl; return 0; }
F - Basketball Exercise
动态规划,没什么好说的,找到公式就好做了,但是注意是两个数组来回动态存答案。
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN=1e5+10; ll n,a[MAXN],b[MAXN],up[MAXN],down[MAXN]; int main(){ cin>>n; for(int i =1;i<=n;i++) cin>>a[i]; for(int i =1;i<=n;i++) cin>>b[i]; down[0]=up[0]=0; for(int i =1;i<=n;i++){ up[i]=max(down[i-1]+a[i],up[i-1]); down[i]=max(up[i-1]+b[i],down[i-1]); } cout<<max(up[n],down[n])<<endl; return 0; }

浙公网安备 33010602011771号