Codeforces Round #737 (Div. 2) 題解
阿新 • • 發佈:2021-08-10
比賽地址:https://codeforces.com/contest/1557。
比賽地址:https://codeforces.com/contest/1557。
A
由樣例解釋可知最佳方案是最大的一組,其他的一組。
typedef long long ll; const int N=1e5; int n,a[N+10]; void mian(){ for(int i=1;i<=n;i++)a[i]=0; scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",a+i); std::sort(a+1,a+n+1); double ans=0.0; for(int i=1;i<=n-1;i++) ans+=a[i]; ans/=(n-1); ans+=a[n]; printf("%.9lf\n",ans); }
B
能分到一段當前僅當排序前和排序後都連續。
於是我們可以求出最少分多少段,然後把它和 \(k\) 比較。
typedef long long ll; const int N=1e5; int n,k; std::pair<int,int> a[N+10]; void mian(){ for(int i=1;i<=n;i++)a[i].first=a[i].second=0; scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) scanf("%d",&a[i].first),a[i].second=i; std::sort(a+1,a+n+1); int ans=0; for(int i=2;i<=n;i++) if(a[i].second!=a[i-1].second+1)ans++; if(ans+1<=k)puts("Yes"); else puts("No"); }