Educational Codeforces Round 69 (Rated for Div. 2)
Posted lin1874
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Educational Codeforces Round 69 (Rated for Div. 2)相关的知识,希望对你有一定的参考价值。
A. DIY Wooden Ladder
题意:搭梯子,选两条最长的边为基础边,然后选择其他边当台阶,并且台阶数小于基础边;
#include <bits/stdc++.h> using namespace std; const int maxn=1e5+10; int main() ios::sync_with_stdio(false); int T; cin>>T; while(T--) int n; cin>>n; int a[maxn]; for(int i=0;i<n;i++) cin>>a[i]; sort(a,a+n); int flag=a[n-2]-1; if(n-2>=flag) cout<<flag<<endl; else cout<<n-2<<endl; return 0;
B. Pillars
题意:n个位置,每个位置一个半径为ai的碟子,移动碟子,判断能否全部叠在一起,移动的条件满足:位置i->j,abs(i-j)==1,i要有碟子,j要么没有,要么就半径要大于i;
思路:记录最大半径的位置,最大半径的位置一定不会移动,然后向两边找比最大半径小的,(特殊是半径不会相同,并且是1-n)
#include <bits/stdc++.h> using namespace std; const int maxn=2e5+100; int main() ios::sync_with_stdio(false); int a[maxn]; int n; cin>>n; int flag; for(int i=1;i<=n;i++) cin>>a[i]; if(a[i]==n) flag=i; int cnt=n-1,l=flag-1,r=flag+1; while(cnt>0) if(l>0&&a[l]==cnt) l--; cnt--; else if(r<=n&&a[r]==cnt) r++; cnt--; else cnt=-2; break; //cout<<"l="<<l<<"r="<<r<<"cnt"<<cnt<<endl; if(cnt==-2) cout<<"NO"<<endl; else cout<<"YES"<<endl; return 0;
C. Array Splitting
题意:给n个数,并且已经按递增排序,要分成k个子集,计算所有子集最大值和最小值的差和,使得这个和最小;
思路:当子集为1个数的时候,这个的差为0,所以在n个数分成k份时,k-1个为1个数的子集时,n-k个不为1个数的子集时最小,计算数组中两两差值,排序,答案就是前n-k个最小值和;
#include <bits/stdc++.h> using namespace std; const int maxn=3e5+100; int main() ios::sync_with_stdio(false); int a[maxn]; int n,k; cin>>n>>k; for(int i=1;i<=n;i++) cin>>a[i]; int b[maxn]; for(int i=1;i<n;i++) b[i]=a[i+1]-a[i]; sort(b+1,b+n); int sum=0; for(int i=1;i<=n-k;i++) sum+=b[i]; cout<<sum<<endl;
以上是关于Educational Codeforces Round 69 (Rated for Div. 2)的主要内容,如果未能解决你的问题,请参考以下文章
Educational Codeforces Round 7 A
Educational Codeforces Round 7
Educational Codeforces Round 90
Educational Codeforces Round 33